我有一个基于 Plone 的站点,在 Apache 2.4 之后运行,它的性能可能会更好一些。一个想法是让 Apache 为内容的静态部分提供服务,防止它们被重写为 Plone 进程,就像通常所做的那样:
RewriteEngine On
RewriteRule ^/(.*) http://localhost:8080/VirtualHostBase/http/%{HTTP_HOST}:80/Plone/VirtualHostRoot/$1 [L,P
这些静态内容并不都在同一个地方。但是,Plone 提供了一种命名资源目录的标准方法;例如,“浏览器”mybrowser
可能myproduct
有一个文件系统目录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]
在这两种情况下,我都希望通过而不是强制代理吞吐量。
我需要以+
某种方式引用字符吗?我已经尝试用反斜杠作为前缀,或者用 替换它们%2B
,但这似乎没有任何区别。
我也看过这里,但ProxyPass <url> !
对我不起作用(还没有?),可能是因为 RewriteRule 而不是ProxyPass
/ ProxypassReverse
(Zope 虚拟主机机器负责“反向”部分本身)。
谢谢你的帮助!
我找到了让它工作的方法。
增加日志级别后:
...我得到了一些关于模式匹配的额外信息(在第 4 级)。
当放在方括号中时,文字
+
字符起作用:对于别名,这不是必需的: