2012-09-07 30 views
0

我一直在冥思苦想了好幾個小時這個看似簡單的重新定向任務,爲我的生活不能得到它去..我是否傳遞的 值或 in url,在這兩種情況下,它重新引導我到http://mywebsite.com/catalogue-gifts/chicks。 (理想情況下,我想第二個條件/規則,使用戶http://mywebsite.com/catalogue-gifts/mango-fruit-trees/的mod_rewrite - 301重新定向發行

下面是我有:

RewriteCond %{QUERY_STRING} pID=1<br /> 
RewriteRule ^product_details2\.asp$ http://mywebsite.com/catalogue-gifts/chicks$1? [L,R=301] 

RewriteCond %{QUERY_STRING} pID=19<br /> 
RewriteRule ^product_details2\.asp$ http://mywebsite.com/catalogue-gifts/mango-fruit-trees$1? [L,R=301] 

非常感謝任何幫助..謝謝

回答

2

這是因爲RewriteCond匹配是一個帶邊界的正則表達式。因此,如果你在查詢字符串:

pID=19 

它將匹配pID=1,因爲它不檢查查詢字符串的結尾,pID=1pID=19一部分。

您需要更改條件:

RewriteCond %{QUERY_STRING} pID=1(&|$) 

RewriteCond %{QUERY_STRING} pID=19(&|$) 

(&|$)末意味着後這些數字,你有一張&字符(另一個參數)或字符串末尾($)。

此外,如果你擔心可能有pID結束,像foopID其他查詢字符串參數,那麼你應該添加的邊界檢查,這些正則表達式的面前,就像這樣:

RewriteCond %{QUERY_STRING} (^|&)pID=1(&|$) 

所以(^|&)可能是查詢字符串的開頭,也可能是&字符。

+0

工程就像一個魅力!非常感謝你。我很欣賞一天的時間和對解決方案的解釋 - 乾杯! –