Quoting Evan Simpson <evan@4-am.com>:
Allowing arbitrary DTML or Python code to rewrite requests before they are resolved could handle any complicated scheme I can conceive of.
evan, yes, this is what i was thinking of with the Mapper.py module-- which is currently very primitive and (probably) un-Zope-like.
My current (soon-to-be-released) code allows you to designate a single Zope object, which must live in the root folder, to be called for this purpose. Its return value is ignored, but it can call request methods to do its work. It can, of course, call on any number of other objects anywhere in the ZODB.
ok, this is what i intended the Mapper to be-- a central place to register methods that implement the re-write rules. i envisioned this object living in the control panel of the VirtualHostFolder product, but the Root object seems good too. haven't built a good interface for it yet.
Once the rewriting is done, and resolution of the URL begins, *we aren't done*. I can't tell from your posts whether you are aware of this, but I didn't see it in the code.
ahhh, no i don't know this. (!) i am pretty new to Zope, and haven't tested out the DTML vars URLn, BASEn, etc. :-) thanks for pointing this out.
Consider a request for '.../a/b/c', where '...' is handled by the rewriting rules (IP/port or HOST, doesn't matter), which decide that this request is for Zope path '/site1/a/b/c'. This will work fine, as long as the rendering process never refers to URLn, BASEn, or x.absolute_url(). Unfortunately, these are very useful, even critical. The management interface and many Products use these all over the place.
understood.
This is where SiteRoots come in. They fix up the URL data in the request as the site root is traversed. A 'site root' is just a traversable object which is meant to be the target of one or more rewrite rules. In the example scenario, 'site1' would be a site root, and would replace '.../site1' with '...' as a URL passed through it.
ok, i can prbobably make VirtualHostFolders do that too. as they are being traversed, they change the request variables to match the correct URL.
Note that a SiteRoot can't tell whether a particular request has been rewritten with that SiteRoot in mind, or at all. Thus a straight, unchanged request for '/site1/a/b/c' will still generate URLs like '.../a/b/c'. I'm not yet sure what, if anything, need be done about this.
well, that is an issue in my software too-- if HTTP_HOST is set to a site in the VirtualHostFolder mapping dictionary, the URL gets rewritten. one thing i haven't managed to do is add an object (or another product) to the VirtualHostFolder control panel object at installation time. the rewrite object that you plan to place in the Root object... do you do this automatically? or does the administrator have to do this?? i'm looking forward to see your take on virtual hosting! cheers adam -- Adam Feuer adamf@pobox.com