考虑以下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,并确保它们匹配。