当源代码包含“?”时重写规则

抓我的头在这个。 我有一个旧的url:

http://myserver/blog/archive?openview&type=Category&key=Demo 

和一个新的URL

  http://myserver/blog/categories/Demo 

我试图得到这个重写规则。 我认为这将是:

  ^/blog/archive\?openview&type=Category&key=(.*) /blog/categories/$1.html [NC,R=301,L] 

但是这没有任何作用。 我尝试了URL和规则(用/replace?):

  http://myserver/blog/archive/openview&type=Category&key=Demo ^/blog/archive/openview&type=Category&key=(.*) /blog/categories/$1.html [NC,R=301,L] 

而且这个按预期工作。 所以我有点笨拙如何处理? 用于匹配旧的url。 我发现的所有样本都描述了相反的情况。 发送“漂亮”的URL到丑陋的一个。 在我的情况下,“丑陋”的url是过去人们collections的url,我想确保他们正确地获得新的数据

稍后想一想(并阅读文档 ):

mod_rewrite匹配只使用URL的位置部分。 “?” 标记位置的结束和参数的开始(又名QueryString)。 一旦我意识到,这只是一个谷歌 。

所以要正确转换你需要一个重写条件:

 RewriteCond %{QUERY_STRING} ^openview&type=Category&key=(.*) [NC] RewriteRule ^/blog/archive$ /blog/categories/%1.html [NC,R=301,L] 

奇迹般有效