You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过.htaccess的mod_rewrite实现带参数旧页面到新域名指定页面的重定向?

用mod_rewrite在.htaccess实现特定页面重定向方案

当然没问题!mod_rewrite正是处理这类域名和页面重定向的绝佳工具,针对你提出的两个需求,我整理了对应的.htaccess规则,还有详细的解释,方便你直接使用和调整:

需求一:单个特定网页重定向到新域名指定页面

这个需求很直接,只需要精准匹配旧域名+旧页面路径,然后跳转到新域名的目标页面即可。

示例规则:

RewriteEngine On

# 匹配旧域名(支持带www或不带),不区分大小写
RewriteCond %{HTTP_HOST} ^(www\.)?oldsite\.com$ [NC]
# 精确匹配旧页面路径,重定向到新域名的目标页面
RewriteRule ^old-page\.html$ https://newsite.com/new-target-page.php [R=301,L]

规则解释:

  • RewriteEngine On:必须放在最开头,用来开启mod_rewrite模块(绝大多数Apache主机默认开启,但加上更保险)
  • RewriteCond 行:匹配旧域名,[NC]标记表示不区分大小写,不管用户访问的是oldsite.com还是www.oldsite.com都会触发规则
  • RewriteRule 行:^old-page\.html$是精确匹配旧页面的路径(^表示开头,$表示结尾,避免部分匹配其他类似路径);[R=301]是永久重定向(利于搜索引擎SEO,建议正式环境使用),如果是临时测试可以换成R=302(临时重定向);[L]表示这是最后一条规则,匹配后不再执行后续规则

需求二:带URL参数的个性化重定向(每个旧页面对应不同新URL)

这个需求分两种场景处理,根据你的实际情况选择:

场景1:旧页面+参数组合无规律,每个对应唯一新URL

如果每个带参数的旧页面都需要跳转到完全不同的新URL,直接写多条独立规则即可:

示例规则:

RewriteEngine On

# 规则1:匹配oldsite.com/product.php?id=123 → 跳转到newsite.com/laptop-pro-123
RewriteCond %{HTTP_HOST} ^(www\.)?oldsite\.com$ [NC]
RewriteCond %{QUERY_STRING} ^id=123$ [NC]
RewriteRule ^product\.php$ https://newsite.com/laptop-pro-123? [R=301,L]

# 规则2:匹配oldsite.com/article.php?slug=how-to-choose → 跳转到newsite.com/guides/how-to-choose-a-laptop
RewriteCond %{HTTP_HOST} ^(www\.)?oldsite\.com$ [NC]
RewriteCond %{QUERY_STRING} ^slug=how-to-choose$ [NC]
RewriteRule ^article\.php$ https://newsite.com/guides/how-to-choose-a-laptop? [R=301,L]

# 规则3:匹配oldsite.com/contact?source=blog → 跳转到newsite.com/contact-us
RewriteCond %{HTTP_HOST} ^(www\.)?oldsite\.com$ [NC]
RewriteCond %{QUERY_STRING} ^source=blog$ [NC]
RewriteRule ^contact$ https://newsite.com/contact-us? [R=301,L]

规则解释:

  • RewriteCond %{QUERY_STRING}:专门匹配URL中的参数部分,^id=123$精确匹配参数值,避免其他类似参数(比如id=1234)误触发规则
  • 规则末尾的?:用来清空原URL的参数,确保新URL不会带上旧的参数内容
  • 建议按页面访问量排序规则,把访问量高的规则放在前面,提升服务器处理效率

场景2:旧参数和新URL有规律对应(比如参数值直接映射到新URL路径)

如果旧参数值可以直接对应到新URL的一部分(比如id=xxx对应新URL的product-xxx),可以用正则捕获参数值,减少规则数量:

示例规则:

RewriteEngine On

# 匹配oldsite.com/product.php?id=任意数字 → 跳转到newsite.com/product-xxx(xxx为捕获的id值)
RewriteCond %{HTTP_HOST} ^(www\.)?oldsite\.com$ [NC]
RewriteCond %{QUERY_STRING} ^id=(\d+)$ [NC]
RewriteRule ^product\.php$ https://newsite.com/product-%1? [R=301,L]

规则解释:

  • (\d+):正则表达式,用来捕获参数中的数字部分(\d表示数字,+表示至少一个)
  • %1:引用前面捕获到的参数值,比如id=456就会替换成product-456
  • 这种方式适合参数和新URL有固定规律的场景,能大幅减少规则数量

注意事项:

  1. 测试规则时,注意浏览器会缓存301永久重定向,建议用隐私模式测试,或者清除浏览器缓存
  2. 确保你的主机是Apache环境(.htaccess只适用于Apache),如果是Nginx服务器,规则语法会不同
  3. 如果规则较多,可以把所有旧域名相关的重定向规则放在一起,便于维护

内容的提问来源于stack exchange,提问作者Guy L

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:41:14