当我注意到$_SERVER [‘PATH_TRANSLATED’]变量正在执行此操作时,我正在尝试创建MVC框架:
[PATH_INFO] => /test/test2/test3
[PATH_TRANSLATED] => redirect:/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] => /test/test2/test3
[PATH_TRANSLATED] => /home/kramer/public_html/test/test2/test3
所以我假设它与Apache有关.我也在Apache下尝试过FastCGI,它产生了相同的重复结果.
解决方法:
如果您正在使用mod_rewrite,那么读取PATH_TRANSLATED值将不会在您的脚本中使用,因为它将指向不存在的文件或路径.您应该在index.php中使用PATH_INFO来了解用户请求的URI.
例如,您可以查看CodeIgniter’s路由器类. CodeIgniter可以使用多种方法来获取URI参数:PATH_INFO,QUERY_STRING,REQUEST_URI和ORIG_PATH_INFO.
如果您仍然对Apache的奇怪行为感到好奇,那么深入了解访问日志将揭示罪魁祸首的一些线索.但是,如果您不使用此变量,请忘记它.它有不同的用途,你的MVC不会使用它.