Mod rewrite Apache mod_rewrite不适用于FastCGI

Mod rewrite Apache mod_rewrite不适用于FastCGI,mod-rewrite,apache2,fastcgi,mod-proxy,Mod Rewrite,Apache2,Fastcgi,Mod Proxy,我正在尝试用HHVM配置Apache。作为其中的一部分,我需要配置重写规则。我已经在FastCGI模式下作为守护进程启动了HHVM。我已经启用了Apache模块mod_proxy、mod_proxy_fcgi和mod_rewrite 首先,没有mod_rewrite,我有一个虚拟主机: <VirtualHost *:80> DocumentRoot /app ProxyPass / fcgi://127.0.0.1:9000/app/ </VirtualHost>

我正在尝试用HHVM配置Apache。作为其中的一部分,我需要配置重写规则。我已经在FastCGI模式下作为守护进程启动了HHVM。我已经启用了Apache模块mod_proxy、mod_proxy_fcgi和mod_rewrite

首先,没有mod_rewrite,我有一个虚拟主机:

<VirtualHost *:80>
  DocumentRoot /app
  ProxyPass / fcgi://127.0.0.1:9000/app/
</VirtualHost>
因此,我可以通过以下方式访问:

$ curl http://localhost/foo.php
HELLO
现在,在配置我的重写规则之后:

<VirtualHost *:80>
  DocumentRoot /app
  ProxyPass / fcgi://127.0.0.1:9000/app/

  RewriteEngine on
  RewriteRule ^(.*)$ /foo.php
</VirtualHost>
Apache错误日志显示:

$ tail -2 /var/log/apache2/error.log 
[Fri Apr 11 21:30:20.645439 2014] [authz_core:error] [pid 5090:tid 140114499983104] [client 127.0.0.1:39056] AH01630: client denied by server configuration: /app/foo.php
[Fri Apr 11 21:30:23.281610 2014] [authz_core:error] [pid 5090:tid 140114616588032] [client 127.0.0.1:39057] AH01630: client denied by server configuration: /app/foo.php
接下来,我设置了目录访问权限:

<VirtualHost *:80>
  DocumentRoot /app
  ProxyPass / fcgi://127.0.0.1:9000/app/

  <Directory /app>
    Require all granted
  </Directory>

  RewriteEngine on
  RewriteRule ^(.*)$ /foo.php
</VirtualHost>
也就是说,现在它似乎尊重重写规则,但现在却忽略了ProxyPass规则

我如何让它们一起工作?

解决了这个问题:使用ProxyPassMatch,而不必费心修改mod_

像这样:

<VirtualHost *:80>
  DocumentRoot /app

  ProxyPassMatch ^.*$ fcgi://127.0.0.1:9000/app/foo.php

  <Directory /app>
    Require all granted
  </Directory>
</VirtualHost>

我有一个类似的问题,没有不使用mod_rewrite的奢侈。 如果mod_geoip选项“GeoIPScanProxyHeaders”在启用“mod_remoteip”的同时设置为“On”,则mod_geoip和mod_rewrite之间存在冲突

“GeoIPScanProxyHeaders”是用于获取客户端IP地址以供“mod_geoip”使用的设置。事实证明,如果加载了“mod_remoteip”,则不应在Apache 2.4上启用mod_geoip选项“GeoIPScanProxyHeaders”应首选“mod_remoteip”,而“mod_geoip”将使用“mod_remoteip”的结果

<VirtualHost *:80>
  DocumentRoot /app
  ProxyPass / fcgi://127.0.0.1:9000/app/

  <Directory /app>
    Require all granted
  </Directory>

  RewriteEngine on
  RewriteRule ^(.*)$ /foo.php
</VirtualHost>
$ curl http://localhost/blah
<?php

echo "HELLO\n";
<VirtualHost *:80>
  DocumentRoot /app

  ProxyPassMatch ^.*$ fcgi://127.0.0.1:9000/app/foo.php

  <Directory /app>
    Require all granted
  </Directory>
</VirtualHost>