我有一个基于Plone的站点,运行在Apache 2.4后面,可能会更好一些。 一个想法是让Apache服务于内容的静态部分,防止它们被重写为Plone进程,就像通常做的那样:
RewriteEngine On RewriteRule ^/(.*) http://localhost:8080/VirtualHostBase/http/%{HTTP_HOST}:80/Plone/VirtualHostRoot/$1 [L,P
那些静态内容并不在同一个地方。 但是Plone提供了一个标准的资源目录命名方式, 例如,我的产品的“浏览器” mybrowser可以有一个文件系统目录static :
/my/plone/root/Products/myproduct/mybrowser/static/
它将作为/++resource++mybrowser-static 。
让Plone提供静态文件没有太大意义,所以我想阻止某些请求被重写,而是直接提供服务。
这是我试过的:
# in Plone: /++resource++mybrowser-static <Directory /my/plone/root/Products/myproduct/mybrowser/static> Options All AllowOverride All Require all granted </Directory> Alias /static /my/plone/root/Products/myproduct/mybrowser/static Alias /++resource++mybrowser-static /my/plone/root/Products/myproduct/mybrowser/static LogLevel alert rewrite:trace3 alias:trace3 ... RewriteCond %{REQUEST_URI} !^/++resource++mybrowser-static RewriteCond %{REQUEST_URI} !^/static/ RewriteRule ^/(.*) http://localhost:8080/VirtualHostBase/http/%{HTTP_HOST}:80/Plone/VirtualHostRoot/$1 [L,P]
因此,我目前有两个别名, ++版本是更一般的方法,所以我希望它的工作。
但是,当我请求http://my.site.com/static/logo.png ,这个工作:
... [rewrite:trace2] ... init rewrite engine with requested uri /static/logo.png ... [rewrite:trace3] ... applying pattern '^/(.*)' to uri '/static/logo.png' ... [rewrite:trace1] ... pass through /static/logo.png
…而.../++resource++mybrowser-static/版本不 (这是由Zope提供的):
... [rewrite:trace2] ... init rewrite engine with requested uri /++resource++mybrowser-static/logo.png ... [rewrite:trace3] ... applying pattern '^/myunitracc([/?].+)\\?$' to uri '/++resource++mybrowser-static/logo.png' ... [rewrite:trace3] ... applying pattern '^/(.*)' to uri '/++resource++mybrowser-static/logo.png' ... [rewrite:trace2] ... rewrite '/++resource++mybrowser-static/logo.png' -> 'http://localhost:8080/VirtualHostBase/http/my.site.com:80/Plone/VirtualHostRoot/++resource++mybrowser-static/logo.png' ... [rewrite:trace2] ... forcing proxy-throughput with http://localhost:8080/VirtualHostBase/http/my.site.com:80/Plone/VirtualHostRoot/++resource++mybrowser-static/logo.png ... [rewrite:trace1] ... go-ahead with proxy request proxy:http://localhost:8080/VirtualHostBase/http/my.site.com:80/Plone/VirtualHostRoot/++resource++mybrowser-static/logo.png [OK]
在这两种情况下,我想通过而不是强制代理吞吐量 。
我需要以某种方式引用+字符吗? 我已经试着用反斜杠将它们全部加上前缀,或用%2Breplace它们,但似乎没有任何区别。
我也在这里看看,但是ProxyPass <url> ! 没有为我工作(还?),也许是因为RewriteRule而不是ProxyPass / ProxypassReverse (Zope虚拟主机负责“反向”部分本身)。
谢谢你的帮助!
我find了一个方法来使它工作。
增加日志级别后:
LogLevel alert rewrite:trace5
…我有一些关于模式匹配的更多信息(在第4级)。
当放在方括号中时,文字+字符工作:
RewriteCond !^/[+][+]resource[+][+]myproduct-static/ RewriteRule ...
对于别名,这不是必须的:
Alias /++resource++myproduct-static /my/zope/root/Products/myproduct/static