2012-06-01 28 views
1

我有我认为是一个简单的mod_rewrite规则。mod_rewrite怪异地附加了21个斜杠到URL

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] 

然而,当我去到一个URL,如:

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

它变成:

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

我期待的URL负载:

index.php? STORE_NAME = e95_airport

当我打电话像一个URL,它工作正常:

店/ e95_airport /一些页面,其他超的index.php

我已经停用所有其他的mod_rewrite规则,以防在我的.htaccess文件的其他地方发生冲突。有没有人可以诊断我的重写规则有什么问题?任何帮助是极大的赞赏!

+0

貌似有一个与'DirectorySlash',不知道如何虽然 –

回答

3

问题是,该网站正在进入一个循环,因为你将它重定向到本质上相同的地址。

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

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

为什么停在21斜线?这是因为Apache会在循环中检测到它,并且如果它自己重新查询了二十次就会停止。

+0

我会看到关于进行调整的规则,看看我是否能避免环路有些冲突。它是有道理的,因为它除了在调用index.php文件时都可以正常工作。一旦我弄清楚了,我会发布更新后的规则。 – Tell

0

正如@Spudley所说,你已经陷入循环。

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

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

我给出的例子之一是:store/e95_airport/some-page-other-than-index.php,因为我需要使用URL格式加载index.php以外的脚本。 – Tell