RE: [Zope] redirection of whole sub-trees
-----Original Message----- From: Jay, Dylan Sent: Thursday, September 09, 1999 09:17 To: 'Martijn Pieters'; Jay, Dylan; 'alex@mop.no' Cc: 'zope@zope.org' Subject: RE: [Zope] redirection of whole sub-trees
-----Original Message----- From: Martijn Pieters [mailto:mj@antraciet.nl] Sent: Wednesday, September 08, 1999 19:41 To: Jay, Dylan; 'alex@mop.no' Cc: 'zope@zope.org' Subject: Re: [Zope] redirection of whole sub-trees
At 08:49 08/09/99 , Jay, Dylan wrote:
Is it possible to make this product redirect whole sub-trees? I'm migrating a Zop1 site using cgi under IIS to Zope2 using ZServer. I want to redirect all the "/cgi-bin/zope.exe/(.*)" queries to "/\1" using the grouping syntax. since I'm not using apache I can't use mod_rewrite so this is the only option I can think of at the moment and I can't upgrade until I have the redirection in place.
I can do the substitution no prob by changing after line 95 like so
for k in self.Mappings.keys(): m = re.match(k, Name) if m: Name = re.sub(k, self.Mappings[k], Name)
But "Name" is not the remainder of the url :(
I believe there is a redirection product doing just that:
Opps, didn't make myself clear. The Redirector product is what I'm using and it doesn't do that. It redirects only objects in one folder not and entire subtree.
Ok, here is the patch that will allow the redirection of subtrees. Whats more it does reg-exp substitutions. The __bobo_traverse__ method in Redirector.py should look like this. def __bobo_traverse__(self, REQUEST, Name = ''): if Name[:6] != 'manage': import ExtensionClass class doTraverse(ExtensionClass.Base): def __init__(self, path, Mappings, Target, HardMap): self.path = path self.Mappings = Mappings self.Target = Target self.HardMap = HardMap def __bobo_traverse__(self, REQUEST, Name = ''): self.path = self.path + '/' + Name return self.__class__(self.path, self.Mappings, self.Target, self.HardMap) def __call__(self, REQUEST): path = self.path if REQUEST['QUERY_STRING']: path = path + "?" + REQUEST['QUERY_STRING'] for k in self.Mappings.keys(): if re.match(k, path): path = re.sub(k, self.Mappings[k], path) break else: if self.HardMap: raise 'Redirect', self.Target def Merge(Target, Url): if Url[:5] == 'http:' or Url[:4] == 'ftp:': return Url else: return Target + Url raise 'Redirect', Merge(self.Target , path) return doTraverse(Name, self.Mappings, self.Target, self.HardMap) if hasattr(self, 'aq_base'): b = self.aq_base if hasattr(b, Name): return getattr(self, Name) try: return self[Name] except: return getattr(self, Name)
participants (1)
-
Jay, Dylan