2010-03-12 76 views
2

我有一個cms驅動的網站,無法更改代碼。我想要完成的是創建友好的url,只使用apaches mod-rewrite引擎。重定向與htaccess中的重寫條件組合

問題是我創建了一個無限循環,因爲我首先將原始URL(index.php?id = 21)重定向到友好的一個(/ friendly /),然後重寫'/ friendly'部分以'id = 21'

我知道應該有一個額外的條件或參數,以避免在這種情況下循環,但我不能得到可能的解決方案之一工作。

Here's代碼:

 
RewriteCond %{query_string} ^id=21$ [NC] 
RewriteRule /* /peuterspeelzaal? [R=301,L] 

RewriteRule ^peuterspeelzaal$ index.php?id=21 [L] 

回答

3

你需要看看request lineTHE_REQUEST看什麼最初被要求:

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /[^?\ ]*\?id=21\ [NC] 
RewriteRule /* /peuterspeelzaal? [R=301,L] 

RewriteRule ^peuterspeelzaal$ index.php?id=21 [L] 
+0

我並不瞭解請求行,但它似乎確實有效。出於好奇,究竟是什麼讓這個代碼工作,我的不是? – 2010-03-22 10:20:03

+1

@Robbert van den Bogerd:應用規則時,URI將更改。 * L *標誌意味着用新的URI重新啓動重寫過程。這會導致無限重定向,因爲這兩個規則都會創建另一個規則接受的新URI。 – Gumbo 2010-03-22 10:42:07

3

我猜你在兩個方向上重寫,以確保舊的鏈接重定向到新的友好的網址?

你可以只添加一個虛擬參數所有的「友好」的改寫,使它們不匹配其他規則:

RewriteCond %{query_string} ^id=21$ [NC] 
RewriteRule /* /peuterspeelzaal? [R=301,L] 

RewriteRule ^peuterspeelzaal$ index.php?id=21&dummy=1 [L] 
+0

好的建議,但是這似乎更像是一個黑客,然後一個適當的解決方案。但是,嘿,它的作品! – 2010-03-22 10:17:50