cha*_*let 6 fastcgi apache-2.2
服务器配置为使用 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>
Run Code Online (Sandbox Code Playgroud)
然后定义一个虚拟主机来使用这个 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>
Run Code Online (Sandbox Code Playgroud)
一切正常,直到我添加 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 = /
Run Code Online (Sandbox Code Playgroud)
我的猜测是 ScriptAlias 和 AliasMatch 之间存在冲突,但我不知道如何解决。
小智 0
她是一个类似问题的解决方案 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>
Run Code Online (Sandbox Code Playgroud)
有了所有重定向,重写就应该按预期工作。顺便说一句,mod_fastcgi 已经过时了,而且很难看。如果您更喜欢使用 2.2(现已 EOL),您可以尝试https://github.com/lazy404/mod_fastcgi_handler(我在繁忙的网站上使用 php-fpm 没有任何问题)它的配置也很干净并与重定向兼容。