繁体   English   中英

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

[英]%0 is not replaced by server name when used with Apache's ProxyPassMatch

问题:

与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>

解决方法:

我在这里发现了一篇有趣的博客文章: 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>

虽然它有效,但我认为这是一个不那么好的解决方法。 我也遇到了“AH00111:Config variable $ {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进程。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM