让Apache提供静态内容,而不是将其转发给Plone(++ resource ++)

我有一个基于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