RewriteCond %{QUERY_STRING} ^id=(.*)$
RewriteRule ^oldpage\.php$ http://new-site.com/newpage-%1 [R=301,L]
and
RewriteRule ^oldpage\.php$ http://new-site.com/newpage-%1? [R=301,L]
在第一种情况下结果是
new-site.com/newpage-3?id=3
在第二个
new-site.com/newpage-3
第二次重写规则中的问号是什么意思?
答案 0 :(得分:8)
?在目的地的末尾(目的地不是正则表达式)意味着没有查询字符串去那个目的地。
RewriteCond %{QUERY_STRING} ^id=(.*)$
RewriteRule ^oldpage\.php$ http://new-site.com/newpage-%1 [R=301,L]
如果查询字符串只包含一个id,它会存储随后在目标中使用的值,所以如果你有
http://foo.com/oldpage.php?id=54
你最终会得到
http://new-site.com/newpage-54?id=54
如果你有
RewriteCond %{QUERY_STRING} ^id=(.*)$
RewriteRule ^oldpage\.php$ http://new-site.com/newpage-%1? [R=301,L]
您将转到同一目的地,但查询字符串为空,所以转到
http://foo.com/oldpage.php?id=54
将最终进入
http://new-site.com/newpage-54