与Apache的ProxyPassMatch一起使用时,%0不会被服务器名称所取代

问题:

与ProxyPassMatch一起使用时,%0不会被服务器名称(即test.local)替代。

<VirtualHost *:80> UseCanonicalName Off # %0 is replaced by server name (works) VirtualDocumentRoot /Users/mattes/sites/%0 # %0 is replaced by an empty string (problem!) ProxyPassMatch ^(/.*\.php)$ fcgi://127.0.0.1:9000/Users/mattes/sites/%0/$1 </VirtualHost> 

解决方法:

我在这里find了一篇有趣的博文: http : //holtstrom.com/michael/blog/post/225/Apache-2.2-Proxy.html 。 基本上,迈克尔使用RewriteEngine来保存variables以备后用。 像这样的东西可以工作,例如:

 <VirtualHost *:80> UseCanonicalName Off VirtualDocumentRoot /Users/mattes/sites/%0 RewriteEngine On RewriteRule .* - [E=SERVER_NAME:%{SERVER_NAME}] ProxyPassInterpolateEnv On ProxyPassMatch ^(/.*\.php)$ fcgi://127.0.0.1:9000/Users/mattes/sites/ \ ${SERVER_NAME}$1 interpolate </VirtualHost> 

虽然它工作,我认为这是一个不太好的解决办法。 我也遇到类似“AH00111:configurationvariables$ {SERVER_NAME}未定义”的错误。


有没有人有一个想法如何解决这个问题?

我在Apache 2.4中使用这个配置:

 <VirtualHost *:8080> UseCanonicalName Off VirtualDocumentRoot "/usr/local/apache/vhosts/%0" RewriteEngine On RewriteRule ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:19054/usr/local/apache/vhosts/%{SERVER_NAME}/$1 [P] </VirtualHost> 

vhosts目录包含具有Apache动态匹配每个请求的域名的目录。 所有的PHP文件然后匹配,并且他们的请求被转发到在127.0.0.1:19054侦听的PHP FPM进程。

此配置适用于在虚拟主机目录内定义的进一步重写规则。