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

Posted

技术标签:

【中文标题】.htaccess 在传递给模板之前重写 PATH_INFO 变量为空;不从 url 中删除 index.php【英文标题】:.htaccess rewriting PATH_INFO vars to empty before passing to template; not removing index.php from url 【发布时间】:2013-02-09 03:26:02 【问题描述】:

大家早上好,我希望这会是一件容易的事! (我还没喝过咖啡,怎么起这么早?!)

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

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

第二个(硬)问题我需要设法从 url 中删除 index.php,但仍要确保显示正确的页面控制器(即 url 中的页面)。我正在使用 PATH_INFO 来获取 var 并显示正确的页面,并且当 index.php 存在时它可以工作。

但由于某种原因,当您从最后一个 RewriteRule 中取出 R 时,/page 总是默认为主 index.php 模板。这就像 .htaccess 或任何在我的网站可以处理页面之前将 PATH_INFO 重写为空的东西。我想我需要在 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】:

那么你有两个选择。您可以通过调整重写器来跳过使用 PATH_INFO 以将路径作为 GET 参数:

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

因此现在使用$_GET["path"]

或从使用$_SERVER["PATH_INFO"] 切换并从$_SERVER["REQUEST_URI"] 获取原始传入路径。有时也有替代环境变量,如REDIRECT_PATH_INFO,请查看print_r($_SERVER);

【讨论】:

老兄! $_SERVER["REQUEST_URI"] 完全成功!我检查了print_r($_SERVER);,它显示 request_uri 正在拉入正确的标签,所以我将 PATH_INFO 换成了那个,一切都很完美。太感谢了! (对不起,我不能投票给你!) 仍然给出 404。使用 InfinityFree。我还需要添加什么吗? @AliFurkan Reference: mod_rewrite, URL rewriting and "pretty links" explained

以上是关于.htaccess 在传递给模板之前重写 PATH_INFO 变量为空;不从 url 中删除 index.php的主要内容,如果未能解决你的问题,请参考以下文章

简单的 .htaccess 重写以传递 1 个参数

RewriteRule ^(.*)/$ ?path=$1 [QSA,L] 在我的 .htaccess 中是啥意思?

.htaccess重写合并

.htaccess 用问号重写 URL

复杂的 htaccess 重写规则 - 我从哪里开始?

htaccess重写缓慢...更好的方法吗?