多域名跳转需用RewriteCond识别域名并启用QSA标志保留参数;匹配多个旧域名统一跳转至新域名时,$1捕获路径、QSA自动追加原始查询字符串;若只保留部分参数(如utm_*),须用RewriteCond提取后显式拼接,并以?清空原始参数;务必添加[L]终止规则,避免Redirect与RewriteRule混用导致参数丢失。

多域名跳转时保留原有查询参数,关键在于用 RewriteCond 精准识别目标域名,并在 RewriteRule 中启用 QSA(Query String Append)标志。不加 QSA,原始 ?key=value 会被丢弃;加了它,参数才会自动拼接到新 URL 后面。
匹配多个旧域名并统一跳转到新域名
当 old1.com、old2.com、www.old3.net 都要跳到 new-site.com,且需保留路径和全部参数,推荐写法如下:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 用
RewriteCond分别或批量匹配域名,[NC]忽略大小写,(www\.)?覆盖带不带 www 的情况 -
RewriteRule ^(.*)$ https://new-site.com$1 [R=301,L,QSA]中的$1捕获原路径,QSA自动追加原始 query string - 示例:访问
old1.com/product?id=88&utm_medium=email→ 跳转至https://new-site.com/product?id=88&utm_medium=email
只保留部分参数,过滤掉冗余查询项
若旧 URL 带大量无用参数(如 ?ref=abc&session=xyz&utm_source=test),而你只想保留 utm_* 类,就不能依赖 QSA 全量保留。应改用条件判断 + 显式拼接:
- 先用
RewriteCond %{QUERY_STRING}提取关键参数,例如:RewriteCond %{QUERY_STRING} (?:^|&)utm_source=([^&]*) - 再在 RewriteRule 目标中手动构造新 query:
/new-path?utm_source=%1 - 末尾加
?清空原始参数,避免重复叠加
避免参数重复或循环跳转的实操要点
常见坑是规则未终止或条件重叠,导致多次跳转后参数越叠越多:
- 所有跳转规则末尾必须加
[L],确保匹配后立即停止后续规则执行 - 不要在同一个配置块里混用 Redirect 和 RewriteRule,前者不支持 QSA,容易丢失参数
- 测试时用
curl -I "https://old1.com/test?x=1&y=2"查看响应头中Location:是否含完整参数

















