服务器配置为使用 fastcgi 处理 php 文件:
<IfModule mod_fastcgi.c>
AddHandler application/x-httpd-php .php
Action application/x-httpd-php /fcgi-bin/php-fpm virtual
ScriptAlias /fcgi-bin/php-fpm /fcgi-extsrvs-phpfpm
<Location "/fcgi-bin/php-fpm">
Order Deny,Allow
Deny from All
Allow from env=REDIRECT_STATUS
</Location>
</IfModule>
然后定义一个虚拟主机来使用这个 fastcgi :
<VirtualHost *:80>
ServerName mydomain.org
DocumentRoot /var/www/mydomain.org
<Location />
Order Allow,Deny
Allow from All
AllowOverride None
</Location>
<IfModule mod_fastcgi.c>
# use the socket as defined for this pool
FastCgiExternalServer /fcgi-extsrvs-phpfpm -socket /var/run/php5-fpm/mydomain.org.sock
</IfModule>
# problem here
AliasMatch ^/(.*) /var/www/mydomain.org/index.php
</VirtualHost>
一切都运行良好,直到我添加了 AliasMatch 行(与 Alias 有同样的问题)。目标是使用 index.php 脚本处理每个请求。这会导致 500 错误,并显示以下日志:
[error] [client 88.xxx.xxx.20] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.
[debug] core.c(3112): [client 88.xxx.xxx.20] r->uri = /fcgi-bin/php-fpm/fcgi-bin/php-fpm/fcgi-bin/php-fpm/fcgi-bin/php-fpm/fcgi-bin/php-fpm/fcgi-bin/php-fpm/fcgi-bin/php-fpm/fcgi-bin/php-fpm/fcgi-bin/php-fpm/fcgi-bin/php-fpm/
[debug] core.c(3118): [client 88.xxx.xxx.20] redirected from r->uri = /fcgi-bin/php-fpm/fcgi-bin/php-fpm/fcgi-bin/php-fpm/fcgi-bin/php-fpm/fcgi-bin/php-fpm/fcgi-bin/php-fpm/fcgi-bin/php-fpm/fcgi-bin/php-fpm/fcgi-bin/php-fpm/
...
[debug] core.c(3118): [client 88.xxx.xxx.20] redirected from r->uri = /fcgi-bin/php-fpm/
[debug] core.c(3118): [client 88.xxx.xxx.20] redirected from r->uri = /
我猜测 ScriptAlias 和 AliasMatch 之间存在冲突,但我不知道如何解决它。
答案1
这是解决类似问题的方法 http://www.tokiwinter.com/avoiding-infinite-recursion-with-mod_rewrite-and-mod_fastcgi/TL;DR 使用 mod_rewrite 并禁用 php 脚本 url 重写
但我强烈建议转向 apache2.4 并使用 mod_proxy_fcgi https://httpd.apache.org/docs/2.4/mod/mod_proxy_fcgi.html在那里你可以
<FilesMatch "\.php$">
SetHandler "proxy:unix:/var/run/php5-fpm/mydomain.org.sock|fcgi://host1/"
</FilesMatch>
这样,所有重定向、重写都应该按预期工作。顺便说一句,mod_fastcgi 已经过时了,而且很难看。如果您更喜欢使用 2.2(现已停产),您可以尝试https://github.com/lazy404/mod_fastcgi_handler(我在一个繁忙的网站上使用 php-fpm 没有任何问题)它的配置也很干净并与重定向兼容。