ProxyPass 仅当文件不存在时

kaq*_*qao 5 mod-rewrite mod-proxy apache-2.2

我见过这个例子:

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ balancer://app_cluster%{REQUEST_URI} [P,QSA,L]
Run Code Online (Sandbox Code Playgroud)

我需要一个类似的东西,当静态文件不存在时,它将委托给 mod_proxy(即做一个 ProxyPass)。可行吗?

Zim*_*mmi 3

这种带有标志的设置P非常适合您想要执行的操作。关于 P 标志的文档指出:

使用此标志 (P) 可以更强大地实现 ProxyPass 指令

关于这个例子的一些事情:正如安德鲁在他的回答中提到的,这DOCUMENT_ROOT是没有必要的。

第二个只是要注意这些指令的位置:如果将 RewriteRule (^(.*)$) 放入一个或类似的容器中,请删除它的第一个“/”...

P 标志隐含着 L 标志,因此未使用它,但如果我们保留它可能会更清晰一些。网址后还需要一个“/”。

所以它可能会变成这样:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ http://somewhere/$1 [P,QSA,L]
Run Code Online (Sandbox Code Playgroud)