mod_rewrite奇怪地在URL上添加了21个斜杠

时间:2012-06-01 21:31:32

标签: php mod-rewrite

我认为这是一个简单的mod_rewrite规则。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^store/([a-z0-9_\-]+)/?([a-z0-9_\-]+)?(.*)?$ store/$2?store_name=$1$3 [L]

但是,当我转到以下网址时:

http://www.mydomain.com/store/e95_airport/

变成:

http://www.mydomain.com/store/e95_airport/////////////////////

我希望加载网址:

的index.php?STORE_NAME = e95_airport

当我调用以下网址时,它可以正常工作:

商品/ e95_airport /一些页-其他超的index.php

我已禁用所有其他mod_rewrite规则,以防我的.htaccess文件中的其他地方发生冲突。这里有没有人可以诊断我的重写规则有什么问题?非常感谢任何帮助!

2 个答案:

答案 0 :(得分:3)

问题是该网站正在进入循环,因为您将其重定向到基本相同的地址。

好的,所以你要用重写来改变它,但它重写它的URL仍然与表达式匹配。

mod_rewrite的工作方式是,一旦重写了URL,它就会有效地用新URL重新查询自己。因此,如果您的新网址仍然与表达式匹配,它将进入循环。

为什么它停在21斜杠?这是因为Apache将检测它何时处于循环中,并且如果它自己重新查询20次则停止。

答案 1 :(得分:0)

正如@Spudley所说,你进入了一个循环。

看看你的重写规则,并查看你想要的结果,我会说重写规则也是错误的。它应该是这样的:

RewriteRule ^store/([a-z0-9_\-]+)/?([a-z0-9_\-]+)?(.*)?$ index.php?store_name=$1 [L]