2011-03-08 38 views
0

我有一箇舊的網址:的RewriteCond,重寫規則和無視多餘的查詢字符串

www.example.com/content.aspx?ID=227&ParentID=33&MicrositeID=0&Page=1 

,我想改寫爲:

www.example.com/product/item 

唯一重要的一點是ID = 227,其後的內容可以被剝離並且不是重定向所必需的。我需要而不是將任何querystrings傳遞到新地址,這基本上是從一個地址到另一個地址的硬重寫。

我有我的重寫規則:

RewriteCond %{QUERY_STRING} ^ID=227(.*)$ [NC] 
RewriteRule ^content\.aspx$ http://www.example.com/product/item [R=301,L] 

但正如我在mod_rewrite的,我掙扎了總小白 - 可以在任何htaccess的大師在那裏幫助我嗎?

+0

您是否需要在重寫的URL內部有'ID = 227',比如'www.example.com/product /項目/ 227 /'? –

回答

0
RewriteCond %{QUERY_STRING} (^|&)ID=(\d+)(&|$) [NC] 
RewriteRule ^content\.aspx$ /product/item/%2? [R=301,L] 

幾點意見...

有沒有必要添加.*在這種情況下,整個字符串相匹配。只要你能確定你想要匹配什麼,你就會好起來的。 (^|&)匹配字符串的開頭或&,而(&|$)匹配字符串的末尾或&。這允許id = xxx在查詢字符串中的任何地方,這是一個很好的做法。 \d匹配一個數字,而+是「一個或多個」的重複運算符。

此外,只要生成的頁面位於同一個域中,您實際上不需要包含域名。只需使用/開始生成的字符串以使其相對於根級別。

%2表示您要從RewriteCond聲明中插入子匹配,而不是RewriteRule。你可能知道後者將是$1,$2

尾隨?告訴重寫引擎不要將查詢字符串追加到URL中。 (別擔心,問號將不會顯示在重定向URL中)

相關問題