mod_rewrite影响get变量

时间:2013-03-29 23:23:56

标签: php apache mod-rewrite

我在Apache上有一个基于PHP的博客,发生了一个简单的mod_rewrite:

Options +FollowSymLinks
RewriteEngine On

RewriteRule ^(.*)$ index.php?story=$1 [L]

但是,当我在PHP脚本中查看$ _GET ['story']时,它每次都会给我“index.php”。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

如果在通过期间发生任何导致内部或外部重定向的更改,Apache将再次运行规则。您应该使用index.php

的规则来捕获它
RewriteRule ^index\.php$ - [L]

只是按原样使用该地址。这就是WordPress的功能。

根据您的apache版本,您可以使用RewriteLogLevel或LogLevel将重写日志级别设置为8。在旧版本中,这必须在httpd.conf中完成,因此您需要一个本地测试站点。

不要保持登录状态,否则你的表现会受到影响。

编辑:

以下是L旗下docs on the rerun的引用:

如果您在.htaccess文件或部分中使用RewriteRule,那么了解规则的处理方式非常重要。这种简化形式是,一旦处理了规则,重写的请求就会被传回URL解析引擎,以便对其进行处理。可能的是,当处理重写的请求时,可能再次遇到.htaccess文件或部分,因此可以从开始再次运行规则集。最常见的情况是,如果其中一个规则导致重定向(内部或外部)导致请求进程重新开始,则会发生这种情况。