mat*_*tes 5 regex apache virtualhost proxypass
问题:
与 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>
Run Code Online (Sandbox Code Playgroud)
解决办法:
我在这里找到了一篇有趣的博客文章:http : //holtstrom.com/michael/blog/post/225/Apache-2.2-Proxy.html。基本上,Michael 使用 RewriteEngine 来保存变量以供以后使用。像这样的事情会起作用,例如:
<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>
Run Code Online (Sandbox Code Playgroud)
虽然它有效,但我认为这是一个不太好的解决方法。我还收到诸如“AH00111:未定义配置变量 ${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>
Run Code Online (Sandbox Code Playgroud)
vhosts目录包含 Apache 将动态匹配每个请求的域名目录。然后,所有 PHP 文件都会被匹配,并且它们的请求将被转发到 PHP FPM 进程,该进程正在监听127.0.0.1:19054。
此配置与虚拟主机目录中定义的进一步重写规则一起使用。