ProxyPass只有在文件不存在的情况下

我见过这个例子:

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之前。