2013-03-29 79 views
0

我对Apache的一个简单的mod_rewrite发生一个基于PHP的博客:mod_rewrite的影响GET变量

Options +FollowSymLinks 
RewriteEngine On 

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

但是,当我看着$ _GET [“故事”]在PHP脚本,它给了我“ index.php“。

任何想法?

+0

这是在DOCUMENT_ROOT吗?或者你有更高级的目录RewriteRules?启用'RewriteLog'来详细调试它。 – mario

+1

'$ 1'被'(。*)'所捕获,所以它会捕获从开始到结束的所有内容(由于'^'和'$')。什么是您输入'$ _GET ['story']'输入'index.php'的URL? – MatRt

+0

example.com/blog/index.php?story=12345 = example.com/blog/12345 – Richard

回答

1

如果在传递过程中发生任何导致内部或外部重定向的更改,Apache将再次运行规则。你应该用规则赶上本作的index.php

RewriteRule ^index\.php$ - [L] 

只是用该地址不变。这就是WordPress所做的。

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

不要让该登录或您的表现受到影响。

编辑:

下面是来自docs on the rerun了L位下报价:

如果您在任何.htaccess文件或部分使用重写规则,重要的是要拥有的是如何规定的一些理解被处理。这种简化的形式是,一旦处理了规则,重写的请求就会交还给URL分析引擎,以便处理它。有可能在处理重写的请求时,可能会再次遇到.htaccess文件或段,因此规则集可能会从头再次运行。最常见的情况是,如果其中一个规则导致重定向(无论是内部还是外部),则会导致请求过程重新开始。

+0

我只是想知道发生了多少次,什么使它停止循环 –

+0

@WalterTross您可以轻松创建一个重写无限循环,我今天下午做了几次。大多数浏览器会通过抱怨太多的重定向来让你知道。 –

+0

是的,但在这种情况下有[L],没有[R],并且似乎像'index.php?story = index.php'或'index.php?story = index.php?story = ......顺便说一句,实际上叫 –