对于使用 php-fpm 7.1.6 的 Apache 2.4.26,$_SERVER['SCRIPT_FILENAME']
(和$_SERVER['PHP_SELF']
)在文件夹上不正确:
阿帕奇 2.4.26:
/index.php
阿帕奇 2.4.25:
/myfolder/index.php
怎么了?
对于使用 php-fpm 7.1.6 的 Apache 2.4.26,$_SERVER['SCRIPT_FILENAME']
(和$_SERVER['PHP_SELF']
)在文件夹上不正确:
阿帕奇 2.4.26:
/index.php
阿帕奇 2.4.25:
/myfolder/index.php
怎么了?
我用这个新的配置指令在 apache 配置中修复了它:
ProxyFCGIBackendType GENERIC
在 SetHandler 指令之前的全局配置中。默认为 FPM,但在某些 php-fpm 配置(SetHandler 和套接字)中不正确。
有了这个错误,所有$_SERVER['SCRIPT_FILENAME']
和$_SERVER['PHP_SELF']
Apache vars ( $_SERVER
)(从 php-fpm 注入)都是错误的,它们没有路径!
ProxyFCGIBackendType 默认为 FPM,但对于许多配置来说是错误的。Apache httpd 应该默认添加 GENERIC 以不破坏网站。
请参阅:https ://httpd.apache.org/docs/2.4/en/mod/mod_proxy_fcgi.html#proxyfcgibackendtype
(作为评论会更好,但我低于最低代表。)
就像 neoteknic 在他们的回答中指出的那样,GENERIC
在我们解决这个错误时,使用后端类型会将您恢复为 2.4.25 行为。
但是请注意,2.4.25 的行为也破坏了其他一些人,并不是万能的。如果您处于绑定状态,新ProxyFCGISetEnvIf
指令可以让您直接控制 FCGI 环境变量,并且如果您需要,它可以接受一些非常复杂的操作的 httpd 表达式语法。这仅在您了解这些环境变量应该是什么时才有帮助,但这是另一种选择。