我有一个旧网站没有“漂亮” URL的客户.所以目前看起来像这样:
http://www.domain.com/?w=42&a=5&b=3
参数值仅是数字.
现在,他们希望将旧站点移至子域,而主(www)域将成为新站点(具有SEO友好URL的WP)的所在地.
现在,我想做的就是重定向所有到达/?w =< num>的请求. (并且只有那些)到sub.domain.com/?w=\u0026lt;num\u0026gt ;,以便现有链接(大部分来自Google)被重定向到子域页面,而新页面则通过漂亮的URL提供新内容.
我尝试了这个:
# This works, but redirects the entire www.domain.com
# to sub.domain.com no mather what
RewriteCond %{HTTP_HOST} ^www\.domain\.com$[NC]
RewriteRule ^(.*)$http://sub.domain.com/$1 [R=301,L]
# But this DOESN'T work
RewriteRule ^/?w(.*) http://sub.domain.com/?w$1 [R=301,L]
# Also tried to redirect 'by hand', but DIDN'T work either
Redirect 301 /?w=42 http://sub.domain.com/?w=42
我究竟做错了什么?我搜寻了很多东西,但总是得到这样的建议.或者也许我只是在搜索错误的关键字…
谢谢!
解决方法:
您无法与重写规则或重定向指令中的查询字符串匹配.您需要与%{QUERY_STRING}变量匹配.尝试:
RewriteCond %{QUERY_STRING} (^|&)w=[0-9]+(&|$)
RewriteRule ^(.*)$http://sub.domain.com/$1 [L,R=301]
请注意,查询字符串会自动附加到规则目标的末尾.