我有一个没有“漂亮”url的旧网站的客户端。 所以目前看起来像这样:
http://www.domain.com/?w=42&a=5&b=3
参数值只是数字。
现在他们希望将旧网站移动到一个子域名和主(www)域名将回家一个新的网站(WP与SEO友好的url)。
现在我想要做的是将所有来自/?w=<num>
(仅限于那些)的请求redirect到sub.domain.com/?w=<num>
,以便现有链接(主要来自Google)被redirect到子域名页面,而新的页面通过非常漂亮的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
我究竟做错了什么? 我search了高低,但总是以这种build议结束。 或者,也许我只是在寻找错误的关键字…
谢谢!
您无法匹配重写规则或重定向指令中的查询字符串。 您需要匹配%{QUERY_STRING}
变量。 尝试:
RewriteCond %{QUERY_STRING} (^|&)w=[0-9]+(&|$) RewriteRule ^(.*)$ http://sub.domain.com/$1 [L,R=301]
请注意,查询字符串会自动附加到规则目标的末尾。
仅供文档使用:如果只要存在URL参数(从一个路径到另一个路径),而您想要重定向一个目录(路径),则可以在维护URL参数的同时在htaccess文件中使用此参数:
# /programs/?id=1 to new path /loadprog/?id=1 RewriteCond %{REQUEST_URI} ^/programs/ RewriteCond %{QUERY_STRING} id= RewriteRule ^programs\/$ /loadprog/$1 [R=301,L]
我相信这会帮助别人,因为我偶然发现上面的问题试图找到这个答案。