抓我的头在这个。 我有一个旧的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]
奇迹般有效