为什么$ _SERVER ['PATH_TRANSLATED']会重演?

时间:2010-02-14 18:47:35

标签: php apache mod-rewrite apache2

当我注意到$ _SERVER ['PATH_TRANSLATED']变量正在执行此操作时,我正在尝试创建一个MVC框架:

  

[PATH_INFO] => /测试/ TEST2 / TEST3
   [PATH_TRANSLATED] =>重定向:/index.php/test/test2/test3/test2/test3

这是我通过http://domain.tld/test/test2/test3访问PHP文件的时候 注意在/ test /

之后它是如何重复的

这是我重写的.htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

有什么想法吗?我尝试改变RewriteRule规则但没有改变。这个变量对于我想要做的事情并不重要,但我想知道为什么会发生这种情况,如果我有错误的配置。

服务器信息:
阿帕奇/ 2.2.3
PHP 5.3.1

编辑:此变量在Lighttpd下不会重复,因为它报告:

  

[PATH_INFO] =&gt; /测试/ TEST2 / TEST3
  [PATH_TRANSLATED] =&gt; /家庭/克莱默/的public_html /测试/ TEST2 / TEST3

所以我假设它与Apache有关。我也在Apache下尝试过FastCGI,它产生了相同的重复结果。

1 个答案:

答案 0 :(得分:3)

如果您使用的是mod_rewrite,那么在您的脚本中读取PATH_TRANSLATED值将毫无用处,因为它将指向不存在的文件或路径。您应该使用PATH_INFO中的index.php来了解用户请求的URI。

例如,您可以查看CodeIgniter's路由器类。 CodeIgniter可以使用多种方式获取URI参数:PATH_INFOQUERY_STRINGREQUEST_URIORIG_PATH_INFO

如果你仍然对Apache的奇怪行为感到好奇,那么深入了解访问日志将揭示罪魁祸首的一些线索。但是,如果您不使用此变量,请忘记它。它有不同的用途,你的MVC将不会使用它。