问题:
与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进程。
此配置适用于在虚拟主机目录内定义的进一步重写规则。