2012-06-01 44 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