Apache mod_proxy_fcgi,php-fpm 和 url 重写问题



我需要将应用程序从Apache PHP模块迁移到PHP-FPM,因为我看到mod_proxy_fcgi是首选方式。

该应用程序正在运行旧的 Zend 框架 1。

VHost的一些相关部分:

RewriteEngine on
DocumentRoot /home/app/www
<Directory "/home/app/www">
Require all granted
AllowOverride All
Options +FollowSymLinks
</Directory>
<FilesMatch .php$>
SetHandler "proxy:unix:/var/run/php/php7.0-fpm.sock|fcgi://php7/"
</FilesMatch>
<Proxy fcgi://php7>
ProxySet connectiontimeout=5 timeout=240
</Proxy>

我的端点是 http://server/CLIENT/index.php

在/home/app/www/CLIENT/.htaccess 中,我有(由 Zend Framework 1.0 指定(

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php/$0 [L]

当我点击一个标准的php页面时,一切都很顺利。但是每当我想使用路由器时,我都会得到PHP-FPM提供的404(例如 http://server/CLIENT/page(。我仍然可以通过直接浏览 http://server/CLIENT/index.php/page 来让我的路由器工作。

URL重写运行,因为当我启用调试重写日志时,我可以看到它通过了所有规则。

有趣的是,我还用旧mod_fastcgi测试了 PHP-FPM。通过这种方法,一切都以完全相同的配置进行。更重要的是,重写日志的调试完全相同。

我已经为此挣扎了好几天了。有没有人有一个绝妙的主意来解决这个问题?

虽然这可能不是最好的答案,但我确实遇到了完全相同的问题。重写您的 .htaccess 文件以具有 ?在索引的末尾.php确实为我解决了它。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php?/$0 [L]

请注意,在重写规则上添加了一个问号。

如果您以不同的方式解决它,请更新这篇文章。