[Zope3-Users] Virtual hosting problem
Hi, I know Zope3 has great support for virtual hosting and you can easily set it up using the Rewrite module of Apache as described here: http://www.zope.org/Wikis/DevSite/Projects/ComponentArchitecture/Zope3Book/virtualhosting.html My problem is that my hosting provider does not allow me to create custom rewrite rules so I need to do the same in Zope3 side. Basically I want to change all request with the form http://www.mysite.com/$1 to http://localhost:8080/site_folder/++vh ++http:www.mysite.com:80/++$1 I guess I need to slightly change Zope publishing mechanism and I saw IVirtualHostRoot in zope.publisher.interfaces.http. Probably calling setVirtualHostRoot when the traversal is at 'site_folder' is what I need but I have no clue about where should I do that. Any help? Thanks in advance Lorenzo ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
Re: [Zope3-Users] Virtual hosting problem
On 8/30/06, Lorenzo Gil Sanchez <[EMAIL PROTECTED]> wrote: I guess I need to slightly change Zope publishing mechanism and I saw IVirtualHostRoot in zope.publisher.interfaces.http. Probably calling setVirtualHostRoot when the traversal is at 'site_folder' is what I need but I have no clue about where should I do that. You could register an event listener for zope.app.publication.interfaces.IBeforeTraverseEvent, and manipulate the request if event.object implements zope.app.folder.interfaces.IRootFolder. You'll need a hack to find the request though; you can get it from the security interaction: from zope.publisher.interfaces.http import IHTTPRequest from zope.security.management import getInteraction def _getHTTPRequest(): """Attempt to get the current request, if it exists""" interaction = getInteraction() if not interaction.participations: return for participant in interaction.participations: if IHTTPRequest.providedBy(participant): return participant That way you can detect the start of a request (before traverse event on the root folder), grab the request, and manipulate it to suit your virtual host needs. -- Martijn Pieters ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
[Zope3-Users] Re: Virtual hosting problem
Lorenzo Gil Sanchez wrote: > Hi, > > I know Zope3 has great support for virtual hosting and you can easily > set it up using the Rewrite module of Apache as described here: > > http://www.zope.org/Wikis/DevSite/Projects/ComponentArchitecture/Zope3Book/virtualhosting.html > > My problem is that my hosting provider does not allow me to create > custom rewrite rules so I need to do the same in Zope3 side. > > Basically I want to change all request with the form > http://www.mysite.com/$1 to http://localhost:8080/site_folder/++vh > ++http:www.mysite.com:80/++$1 > > I guess I need to slightly change Zope publishing mechanism and I saw > IVirtualHostRoot in zope.publisher.interfaces.http. Probably calling > setVirtualHostRoot when the traversal is at 'site_folder' is what I need > but I have no clue about where should I do that. Write a custom traversal adapter: from zope.interface import implementsOnly from zope.component adapts from zope.publisher.interfaces.browser import IBrowserRequest from zope.app.container.interfaces import IContainer from zope.app.container.traversal import ItemTraverser class IVirtualHostRoot(IContainer): """We assume that the roots of virtual hosts are containers""" class VirtualHostRootTraverse(ItemTraverser): adapts(IVirtualHostRoot, IBrowserRequest) implementsOnly(IBrowserPublisher) def publishTraverse(self, request, name): request.setVirtualHostRoot([]) return super(VirtualHostRootTraverse, self).publishTraverse(request, name) Untested, no warranties. Philipp ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users