.htaccess配置问题:如何将旧域名带参数URL重定向至无参数新域名
解决old.domain.com全量重定向到new.domain.com(丢弃所有路径和参数)
这个问题我之前处理过,核心原因是Apache的RewriteRule默认会保留原URL的查询字符串,所以带参数的请求会把参数带过去。咱们只需要调整.htaccess里的规则,明确丢弃路径和查询字符串就行。
适用Apache 2.4及以上版本的规则
直接使用QSD(Query String Discard)标记,它会自动丢弃原URL的所有查询字符串,同时忽略原路径,直接跳转到新域名的根:
RewriteEngine On # 匹配old.domain.com的所有请求,重定向到new.domain.com并丢弃查询字符串 RewriteCond %{HTTP_HOST} ^old\.domain\.com$ [NC] RewriteRule ^.*$ https://new.domain.com/ [R=301,L,QSD]
适用Apache 2.4以下版本的规则
如果你的服务器Apache版本低于2.4,QSD标记不生效,可以在目标URL末尾加一个?,同样能达到丢弃查询字符串的效果:
RewriteEngine On # 兼容低版本Apache的重定向规则 RewriteCond %{HTTP_HOST} ^old\.domain\.com$ [NC] RewriteRule ^.*$ https://new.domain.com/? [R=301,L]
关键说明
[NC]:忽略主机名的大小写,确保OLD.domain.com这类大小写混合的请求也能匹配。[R=301]:表示永久重定向,如果你还在测试阶段,可以先改成R=302(临时重定向),避免浏览器缓存错误的重定向规则。[L]:表示这是最后一条规则,匹配后不再执行后续的重写规则。- 目标URL末尾的
/:确保跳转到新域名的根目录,而不是可能出现的无尾斜杠情况。
测试的时候,不管访问old.domain.com/index.php?goofy还是任何带路径、参数的URL,都会直接跳转到new.domain.com,不会携带任何额外内容。
内容的提问来源于stack exchange,提问作者stecog
相关产品推荐
相关产品推荐

