2010-12-16 72 views
0
RewriteEngine On 
RewriteRule books/(.*)/(.*) php/booksByLanguage.php?lid=$2 
RewriteRule list_books/(.*)/(.*) php/listBooks.php?cat_id=$2 


htaccess的重寫規則工作不正常

我使用htaccess的重寫URL(以上是我使用的代碼)

問題是所述第二線(RewriteRule list_books/(.*)/(.*) php/listBooks.php?cat_id=$2)工作不正常。即,


第二線將正常工作,當我評論的第一行(RewriteRule books/(.*)/(.*) php/booksByLanguage.php?lid=$2

下面的代碼工作正常

RewriteEngine On 
    #RewriteRule books/(.*)/(.*) php/booksByLanguage.php?lid=$2 
    RewriteRule list_books/(.*)/(.*) php/listBooks.php?cat_id=$2 


我想這兩個規則爲我工作。

回答

2

嘗試添加開始和結束標記^ $。

重寫規則^ /書籍/()/()$ PHP/booksByLanguage.php?蓋= $ 16

這樣,你的第一條規則不會被觸發list_books匹配。

+0

+1正確識別問題,-1解決方案可能因爲網站結構不起作用, +1。總結:+1 – 2010-12-16 09:38:12

+0

:)我很感謝你對三次點擊的澄清。我懷疑這會在這個特殊問題上得到讚揚。 – 2010-12-16 09:44:29

+0

謝謝你們,隊長你的回答對我有效。 @joe我不明白你說了什麼,我是新來的。任何方式,我標記這個答案被接受,並提出「這個答案是有用的」爲2. – praveenmon 2010-12-16 10:04:18

2

問題是:您沒有定義以^開頭的行。 所以第一條規則將永遠匹配,如果第二條也匹配。 ,因爲它只需要匹配字符串。例如:

books.*將匹配booksshelf以及mybookshelf ^books.*將只匹配bookshelf

RewriteEngine On 
RewriteRule list_books/(.+)/(.+)$ php/listBooks.php?cat_id=$2 [L] 
RewriteRule books/(.+)/(.+)$ php/booksByLanguage.php?lid=$2 

這應該工作,但不漂亮。 事情是當第一條規則(在更新的代碼中)匹配時,第二條規則也是如此。但不是相反的。

所以我把它放在上面,並設置最後一個開關[L],這樣以後就不會執行其他規則。

但這是錯誤的方式!

你應該定義你的重寫規則,以便它們只匹配你想要的!

我不知道您的結構,所以這可能不行,但我能想象像下面這樣:

RewriteEngine On 
RewriteRule ^/list_books/(.+)/(.+)$ php/listBooks.php?cat_id=$2 
RewriteRule ^/books/(.+)/(.+)$ php/booksByLanguage.php?lid=$2 

,如果這是你的根水平,你需要包括開始削減,作爲它的部分請求,但我不能告訴你,不知道你的結構。

+0

喬你的答案也是正確的。十分感謝。烏爾詳細的答案是偉大的。還有一個問題,我可以如何解決這個問題。我不能在這裏看到任何關閉按鈕。 – praveenmon 2010-12-16 10:06:25

+0

您的questin通過接受答案而「關閉」。關閉的問題只能由擁有足夠聲譽的成員投了幾票,而且只能用於壞的或無用的問題。 – 2010-12-18 20:56:36