重写后无法设置PHP PATH_INFO


PHP PATH_INFO fails to be set after rewrite

我正在一个共享托管服务器上工作,该服务器在我的本地主机上运行良好,我很好奇是什么导致了这种行为。我正在使用Apache和mod_rewrite将URL重定向到具有以下功能的前端控制器:

RewriteEngine On
RewriteCond %{REQUEST_URI} '..+$
RewriteCond %{REQUEST_URI} !'.html$
RewriteRule .* - [L]
#Redirect to front controller
RewriteRule ^(.*)$ index.php/$1 [QSA,L]

在index.php上,我有一个用于调试目的的简单检查设置:

if(isset($_SERVER['PATH_INFO']))  
{  
    echo $_SERVER['PATH_INFO'];  
}
else  
{  
    echo "No Path";  
}  
die;

访问http://example.com/testing输出"无路径"
访问http://example.com/index.php/testing输出/测试

此重定向在我的本地主机上按预期工作http://example.com/testing输出"/测试"

有人知道是什么原因造成的吗?有没有一种更通用的方法可以实现重定向,而不易在主机之间出现问题?

编辑:

输出$_SERVER['PATH_INFO'], $_SERVER['ORIG_PATH_INFO'], $_SERVER['PHP_SELF'], $_SERVER['REQUEST_URI']分别显示:

path:
orig: /testing
self: /index.php
uri: /testing

造成这种情况的原因是什么?ORIG_PATH_INFO更可靠吗?此外,REQUEST_URI似乎也很准确,这是一个更合适的变量吗?

URL是重要的部分。如果你通过http://example.com/testing文件名和查询字符串之间没有任何内容。

包含任何客户端提供的路径名信息,跟在实际路径名后面脚本文件名,但在查询字符串之前(如果可用)。对于实例,如果当前脚本是通过URL访问的http://www.example.com/php/path_info.php/some/stuff?foo=bar然后$_SERVER['PATH_INFO']将包含/some/stuff。

->http://www.php.net/manual/en/reserved.variables.server.php

在共享服务器上部署代码后,我遇到了同样的问题。我写了一个脚本来查看所有全局,并发现

的原始路径

包含以前在本地开发框的PATH_INFO中的信息。

我已经有了一个特定于主机的配置文件。我所要做的就是添加一个新的主机特定参数(PathInfoName)。在我的本地盒子上,它被设置为PATH_INFO,在共享主机上,它是ORIG_PATH_INFO。

它解决了这个问题。