我正在一个共享托管服务器上工作,该服务器在我的本地主机上运行良好,我很好奇是什么导致了这种行为。我正在使用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。
它解决了这个问题。