我有一个旧网址:
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大师能帮助我吗?
答案 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。 (别担心,问号不会显示在重定向网址中)