`$_SERVER[';SCRIPT_NAME';]`包括REST资源,而不仅仅是php文件


`$_SERVER['SCRIPT_NAME']` includes REST resource instead of just the php file

考虑以下GET请求:www.foo.com/bar.php/rest/resources,则应为以下情况:

$_SERVER['SCRIPT_NAME'] === 'bar.php';

这在我的本地机器中是正确的,在我们的开发服务器中也是如此。但在我们的测试服务器中:

echo $_SERVER['SCRIPT_NAME']; // bar.php/rest/resource

这是错误的。我很确定这是由某些Apache配置引起的,因为测试服务器的故障是在从Apache 2.2升级到2.4.7时开始发生的(为我们的组织添加了配置)。我阅读了Apache的升级/发布说明,似乎无法确定发生了什么。

更多信息:我已经检查了PHP_SELF与PATH_INFO与SCRIPT_NAME与REQUEST_URI,我的PHP_SELF和SCRIPT_NAMEs似乎已切换。代替

[PHP_SELF] => /test.php/foo/bar [SCRIPT_NAME] => /test.php

我得到

[PHP_SELF] => /test.php [SCRIPT_NAME] => /test.php/foo/bar

SCRIPT_NAME由Web服务器(Apache、NGINX等)定义。根据您的服务器配置,SCRIPT_NAME的值会有所不同。您需要检查两台机器上的vhost-config,并确保它们匹配。