重写,重写和忽略额外的查询字符串

时间:2011-03-08 06:25:29

标签: .htaccess mod-rewrite

我有一个旧网址:

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

我希望改写为:

www.example.com/product/item

唯一重要的位是ID = 227,之后的所有内容都可以被删除,重定向不需要。我需要将任何查询字符串传递给新地址,这基本上是从一个地址到另一个地址的硬重写。

我有我的重写规则:

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

但是因为我是mod_rewrite的总菜鸟,我正在努力 - 那里的任何一位htaccess大师能帮助我吗?

1 个答案:

答案 0 :(得分:0)

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

一些评论......

在这种情况下,无需添加.*来匹配整个字符串。只要你能确定你想要匹配的东西,你就可以了。 (^|&)匹配字符串的开头或&而(&|$)匹配字符串的结尾或&amp ;.这允许id = xxx在查询字符串中的任何位置,这是一种很好的做法。 \d匹配一个数字,而+是“一个或多个”的重复运算符。

此外,只要结果页面位于同一域中,您实际上不需要包含域名。只需使用/启动生成的字符串,使其相对于根级别。

%2表示您从RewriteCond语句而不是RewriteRule插入子匹配。您可能知道后者为$1$2

尾随?告诉重写引擎不要将查询字符串附加到URL。 (别担心,问号不会显示在重定向网址中)