.htaccess在传递给模板之前重写PATH_INFO变量为空;不从url中删除index.php

时间:2013-02-23 15:47:42

标签: php .htaccess url-rewriting url-routing pathinfo

早上大家,我希望这将是一个简单的! (我甚至没有咖啡,为什么我这么早起来?!)

无论如何......你有两个人: 第一个(基本)问题我试图从我的链接中删除index.php(这似乎是不可能的,感谢hostgator :))。经过一堆搜索,我已经到了/ page重定向到/index.php/page的地步。现在这比没有好,但当然还不理想。我不得不用[R]来做。我的.htaccess是:

RewriteCond   %{REQUEST_FILENAME}   !-f 
RewriteCond   %{REQUEST_FILENAME}   !-d 
RewriteRule   ^(.*)$                index.php/$1  [R,L]

第二个(硬)问题我需要找到从网址中删除index.php但仍然确保显示正确的页面控制器(即网址中的页面)。我正在使用PATH_INFO来获取var并显示正确的页面,并且当index.php存在时它会起作用。

但出于某种原因,当你从最后一个RewriteRule中取出R时,/ page总是默认为主index.php模板。这就像.htaccess或者在我的网站处理页面之前重写PATH_INFO的任何内容。我想我需要在<。strong>之前锁定PATH_INFO .htaccess重写它。

对于某些测试,我坚持使用var_dump(path_segments());,而在/index.php/page上,它会给出:array(2) { [0]=> string(0) "" [1]=> string(10) "proper-page" }。 但是,当您从上面的重写规则中取出R并且只使用/ page访问时,它只会给出: array(2) { [0]=> string(0) "" [1]=> string(0) "" }


现在我甚至不知道如果有一个简单的方法来做第一个问题我是否需要担心第二个问题。但至少那是我现在想弄清楚的一切。感谢我能得到的所有帮助!

1 个答案:

答案 0 :(得分:1)

那么你有两个选择。您可以通过调整rewriterule来跳过使用PATH_INFO来为GET参数提供路径:

  RewriteRule   ^(.*)$     index.php?path=$1  [L,QSA]

现在使用$_GET["path"]

或者从使用$_SERVER["PATH_INFO"]切换并从$_SERVER["REQUEST_URI"]获取origianl传入路径。有时还有其他环境变量,例如REDIRECT_PATH_INFO,请检查print_r($_SERVER);