我对Apache的一个简单的mod_rewrite发生一个基于PHP的博客:mod_rewrite的影响GET变量
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^(.*)$ index.php?story=$1 [L]
但是,当我看着$ _GET [“故事”]在PHP脚本,它给了我“ index.php“。
任何想法?
我对Apache的一个简单的mod_rewrite发生一个基于PHP的博客:mod_rewrite的影响GET变量
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^(.*)$ index.php?story=$1 [L]
但是,当我看着$ _GET [“故事”]在PHP脚本,它给了我“ index.php“。
任何想法?
如果在传递过程中发生任何导致内部或外部重定向的更改,Apache将再次运行规则。你应该用规则赶上本作的index.php
RewriteRule ^index\.php$ - [L]
只是用该地址不变。这就是WordPress所做的。
根据您的apache版本,您可以使用RewriteLogLevel或LogLevel将重写日志级别设置为8。在旧版本中,这个必须在httpd.conf中完成,所以你需要一个本地测试站点。
不要让该登录或您的表现受到影响。
编辑:
下面是来自docs on the rerun了L位下报价:
如果您在任何.htaccess文件或部分使用重写规则,重要的是要拥有的是如何规定的一些理解被处理。这种简化的形式是,一旦处理了规则,重写的请求就会交还给URL分析引擎,以便处理它。有可能在处理重写的请求时,可能会再次遇到.htaccess文件或段,因此规则集可能会从头再次运行。最常见的情况是,如果其中一个规则导致重定向(无论是内部还是外部),则会导致请求过程重新开始。
我只是想知道发生了多少次,什么使它停止循环 –
@WalterTross您可以轻松创建一个重写无限循环,我今天下午做了几次。大多数浏览器会通过抱怨太多的重定向来让你知道。 –
是的,但在这种情况下有[L],没有[R],并且似乎像'index.php?story = index.php'或'index.php?story = index.php?story = ......顺便说一句,实际上叫 –
这是在DOCUMENT_ROOT吗?或者你有更高级的目录RewriteRules?启用'RewriteLog'来详细调试它。 – mario
'$ 1'被'(。*)'所捕获,所以它会捕获从开始到结束的所有内容(由于'^'和'$')。什么是您输入'$ _GET ['story']'输入'index.php'的URL? – MatRt
example.com/blog/index.php?story=12345 = example.com/blog/12345 – Richard