2012-12-14 85 views
0

其他RewriteRules的工作,所以我已經取代了這些,並把它放在第一位。處理它故意返回500錯誤,所以我相信我的語法錯了,而不是我的配置。爲什麼這個mod_rewrite 301重定向工作?

我已經重新設計的是曾經有過像URL站點:

/product_view.asp?product_id=123&images_id=456 

我的新網站有像URL:

/shop/product/123 

(其中兩個123可相同,因爲我已經保持相同的數據庫)

我重寫規則是:

RewriteRule ^product_view.asp\?product_id=([0-9]+).*$ /shop/product/$1 [R=301,L] 

但沒有任何反應 - 沒有錯誤,沒有500s,只是沒有。

我做錯了什麼?

+0

也許這是由重寫中缺少'images_id'造成的? – ianbarker

回答

2

RewriteRule僅引用路徑,不包括QUERY_STRING。從QUERY_STRINGRewriteCond查找product_id

RewriteCond %{QUERY_STRING} (?:^|&)product_id=([0-9]+) 
RewriteRule ^product_view\.asp$ /shop/product/%1? [R=301,L] 
RewriteCond

分組部分可以被稱爲%1。它可以用於RewriteRule

如果?被放置在取代RewriteRule部的端部,QUERY_STRING將被丟棄。 (如果您的Apache版本是2.4或更高版本,則可以使用QSD標誌)。並非總是需要,但可能您不喜歡如/shop/product/123?product_id=123&images_id=456這樣的醜陋URL。

檢查mod_rewrite document的細節。

+0

我不知道!這實際上完全改變了我對mod_rewrite工作原理的理解 - 謝謝! –