[Zope3-Users] Apache config. for skinned sites

Marius Gedminas marius at gedmin.as
Sun Aug 24 22:33:54 EDT 2008


Hi,

On Thu, Aug 21, 2008 at 05:04:30PM +1200, andrew wrote:
> Say I've got a site at:
> 
> http://127.0.0.1:8080/mysite
> 
> and I've mapped this to a domain (mysite.com) pointed to by an Apache
> rewrite rule:
> 
> RewriteRule ^/(.+) http://127.0.0.1:8080/mysite/++vh++http:
> %{HTTP_HOST}:80/++/$1 [L,P]

Warning: HTTP_HOST sometimes includes the port number.  It all depends
on what the browser sends you.

I'm also somewhat surprised to see you using (.+) rather than (.*).

> but I've now created a skin for the site that I want to point
> skin2.mysite.com at. The following rewrite rule works:
> 
> RewriteRule ^/(.+) http://127.0.0.1:8080/mysite/++vh++http:
> %{HTTP_HOST}:80/++/++skin++skin2/$1 [L,P]
> 
> except that the skin URL component ends up in viewlet URLs, which sort
> of makes sense since it's after the virtual host stuff. However, it
> would be nice to get rid of the skin URL component altogether in page
> resources since it's being handled by Apache already.

> Also, I still want to be able to test the skin at:
> 
> http://mysite.com/++skin++skin2/
> 
> so in this case the skin component would have to stay there.
> 
> I've tried moving the skin URL component before the virtual host
> component in the rewrite rule:
> 
> RewriteRule ^/(.+) http://127.0.0.1:8080/mysite/++skin++skin2/++vh
> ++http:%{HTTP_HOST}:80/++/$1 [L,P]
> but when accessing, e.g., http://skin2.mysite.com/testpage I get:
> 
> File
> '/opt/vortex/buildout/vortex/var/eggs/zope.publisher-3.4.1-py2.4.egg/zope/publisher/http.py', line 568 in shiftNameToApplication
>   raise ValueError("Can only shift leading traversal "
> ValueError: Can only shift leading traversal names to application names
> 
> Any ideas how I can have my cake and eat it too ? :-)

It's an intentional limitation of the ++skin++ directive: it is only
allowed at the very beginning of a URL (and, I think, due to an
implementation detail, just after the ++vh++ directive).  IIUC it's a
security measure: you don't want your users to switch to other skins
that may have views that shouldn't be available to them.

You can try

  RewriteRule ^/(.+) http://127.0.0.1:8080/++skin++skin2/mysite/++vh++http:%{HTTP_HOST}:80/++/$1 [L,P]

instead.

Marius Gedminas
-- 
MCSE == Marginal Computer Software Enthusiast
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
Url : http://mail.zope.org/pipermail/zope3-users/attachments/20080824/4fcfcbd6/attachment.bin 


More information about the Zope3-users mailing list