1

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

无论如何.. 为您提供了一个两部分: 第一个(基本)问题,我试图从我的链接中删除 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 重写为空的东西。我想我需要在 .htaccess 重写它之前锁定 PATH_INFO 。

对于我坚持的一些测试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) "" }.


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

4

1 回答 1

3

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

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

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

或者从 using 切换$_SERVER["PATH_INFO"]并从$_SERVER["REQUEST_URI"]. 有时还有其他环境变量,例如REDIRECT_PATH_INFO,检查print_r($_SERVER);

于 2013-02-23T16:22:25.743 回答