2012-02-13 15 views
1

我正在共享主机服务器上设置一些在本地主机上正常工作的东西,我很好奇是什么导致了这种行为。我重定向与Apache的mod_rewrite和URL到前端控制器:PHP PATH_INFO在重写后无法设置

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输出/测试

该重定向在我的本地主机上按照预期工作,输出“/ 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也是准确的,是一个更合适的变量?

回答

2

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

+0

是的,但是这被重定向到index.php/$ 1,它应该以http://example.com/index.php/testing作为结尾,并在/ test后面跟上文件名并且在(不存在的)查询之前串。 – 2012-02-13 22:24:33

+0

但是该页面通过http://example.com/testing表示(重写在内部完成)。 – MasterCassim 2012-02-14 17:31:27

1

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

ORIG_PATH_INFO

包含用于在PATH_INFO在我的本地开发框信息。

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

它解决了这个问题。