我在 Apache 2.4.25 上有一个虚拟主机,PHP-FPM 7.1.4 通过 mod_proxy_fcgi 连接,如下所示:
<VirtualHost *:80>
ServerName example.com
DocumentRoot /srv/www/example.com
<Directory /srv/www/example.com>
AllowOverride All
Require all granted
</Directory>
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
<FilesMatch ".+\.ph(p[3457]?|t|tml)$">
SetHandler "proxy:unix:/run/php/example.sock|fcgi://localhost"
</FilesMatch>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
大多数应用程序在此设置下都能完美运行,但有一个应用程序使用 PATH_INFO 来提取请求。该应用程序在其 .htaccess 中有类似的内容:
RewriteEngine On
RewriteCond $1 ^index\.php
RewriteRule ^(.*)$ - [PT,L]
RewriteRule ^(.*)$ index.php/$1 [PT,L]
Run Code Online (Sandbox Code Playgroud)
简单地说,所有不是的东西都index.php
应该作为路径传递给它。访问 URL http://example.com/index.php/test可以正常工作并按[PATH_INFO] => /test
预期显示,但访问http://example.com/test 会死
AH01071: Got error 'Primary script unknown\n'
Run Code Online (Sandbox Code Playgroud)
LogLevel trace6
mod_rewrite 和 mod_proxy_fcgi 的设置表明重定向已正确完成,并且正确的路径也传递给 PHP-FPM。
/index.php/test 的跟踪:
[Sat Apr …
Run Code Online (Sandbox Code Playgroud)