我见过这个例子:
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f RewriteRule ^/(.*)$ balancer://app_cluster%{REQUEST_URI} [P,QSA,L]
我需要一个类似的东西,当一个静态文件不存在时,将委托给mod_proxy(即做一个ProxyPass)。 它可行吗?
这个设置与P
标志是你想要做的权利之一。 关于P旗的文件指出:
使用此标志(P)来实现ProxyPass指令的更强大的实现
关于这个例子的一些事情:正如Andrew在他的回答中提到的那样, DOCUMENT_ROOT
不是必须的。
第二只是要注意这些指令的位置:如果你把它放在一个或类似的容器中,删除RewriteRule的第一个“/”(^(。*)$)。
而P标志表示L标志,所以它不被使用,但如果我们离开它可能会更清楚一点。 Web地址之后还需要一个“/”。
所以它可能会变成这样:
RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^/(.*)$ http://somewhere/$1 [P,QSA,L]
在Apache 2.4中,如果条件在运行时为true, If
指令将应用指令。 举个例子:
<If "! -f %{REQUEST_FILENAME}"> ProxyPass ... </If>
有关If指令和expression式,请参阅Apache 2.4文档。
顺便说一下,文档说REQUEST_FILENAME是请求资源的完整文件path,所以你不应该在文件_ROOT之前。