Apache 2.4.26 中的 SCRIPT_FILENAME 和 PHP_SELF 错误
Posted
技术标签:
【中文标题】Apache 2.4.26 中的 SCRIPT_FILENAME 和 PHP_SELF 错误【英文标题】:Wrong SCRIPT_FILENAME & PHP_SELF in Apache 2.4.26 【发布时间】:2017-11-23 06:02:34 【问题描述】:对于使用 php-fpm 7.1.6 的 Apache 2.4.26,$_SERVER['SCRIPT_FILENAME']
(和 $_SERVER['PHP_SELF']
)在文件夹上不正确:
Apache 2.4.26:
/index.php
Apache 2.4.25:
/myfolder/index.php
怎么了?
【问题讨论】:
【参考方案1】:我用这个新的配置指令在 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
【讨论】:
FWIW 他们已经意识到了这一点,并正在为下一个版本而努力。 也为我工作。将其添加到 etc/sites-available 文件的顶部 你知道我如何在 puphpet/vagrant 设置中修复/更改这个吗? @Michael:将其添加到您的.htaccess
或 PuPHPet 的虚拟主机级自定义指令中。
@leek 谢谢,将它添加到 htaccess 作品中。但我不明白我必须在“PuPHPet 的虚拟主机级自定义指令”中更改什么/在哪里更改它。你的意思是config.yaml还是puphpet文件夹中的文件之一?【参考方案2】:
(作为评论会更好,但我低于最低代表。)
就像 neoteknic 在 their answer 中指出的那样,使用 GENERIC
后端类型将在我们解决此错误时将您恢复为 2.4.25 行为。
但是请注意,2.4.25 的行为breaks some other people too 并不是万能的。如果您处于绑定状态,新的 ProxyFCGISetEnvIf
directive 可以让您直接控制 FCGI 环境变量,并且如果您需要,它可以接受一些非常复杂的操作的 httpd 表达式语法。仅当您了解这些环境变量应该是什么时,这才有帮助,但这是另一种选择。
【讨论】:
以上是关于Apache 2.4.26 中的 SCRIPT_FILENAME 和 PHP_SELF 错误的主要内容,如果未能解决你的问题,请参考以下文章