【问题标题】:Why is $_SERVER['PATH_TRANSLATED'] repeating itself?为什么 $_SERVER['PATH_TRANSLATED'] 会重复自己?
【发布时间】:2011-01-16 18:21:32
【问题描述】:

当我注意到 $_SERVER['PATH_TRANSLATED'] 变量正在这样做时,我正在尝试创建 MVC 框架:

[PATH_INFO] => /test/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 规则,但没有任何改变。该变量对于我想要做的事情并不重要,但是我想知道为什么会发生这种情况以及我是否有错误配置。

服务器信息:
Apache/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,它产生了相同的重复结果。

【问题讨论】:

    标签: php apache mod-rewrite apache2


    【解决方案1】:

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

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

    如果你仍然对你的 Apache 的奇怪行为感到好奇,也许挖掘访问日志会发现一些线索来找出罪魁祸首。但是,如果您不使用此变量,请忘记它。它有不同的用途,您的 MVC 不会使用它。

    【讨论】:

    • 是的,我不打算一开始就使用该变量。只是好奇为什么会这样设置。不过还是谢谢。
    猜你喜欢
    • 2015-06-18
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多