当我注意到$ _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,它产生了相同的重复结果。
答案 0 :(得分:3)
如果您使用的是mod_rewrite
,那么在您的脚本中读取PATH_TRANSLATED
值将毫无用处,因为它将指向不存在的文件或路径。您应该使用PATH_INFO
中的index.php
来了解用户请求的URI。
例如,您可以查看CodeIgniter's路由器类。 CodeIgniter可以使用多种方式获取URI参数:PATH_INFO
,QUERY_STRING
,REQUEST_URI
和ORIG_PATH_INFO
。
如果你仍然对Apache的奇怪行为感到好奇,那么深入了解访问日志将揭示罪魁祸首的一些线索。但是,如果您不使用此变量,请忘记它。它有不同的用途,你的MVC将不会使用它。