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

通过.htaccess实现旧域名全页面重定向至新域名时的异常问题求助

解决.htaccess旧域名全页面重定向到新域名路径的问题

看起来你的重定向规则问题出在RewriteCond的匹配逻辑上,咱们一步步拆解修复:

问题根源分析

你原来的规则里,RewriteCond %{HTTP_HOST} ^olddomain.com/$1 犯了两个关键错误:

  1. %{HTTP_HOST} 变量只包含域名部分(比如 www.olddomain.com),完全不包含请求路径(比如/fun-blog-post/),所以你在后面加/$1是无效的,永远匹配不到带路径的请求。
  2. 在RewriteCond里引用捕获组应该用%1而不是$1,$1是RewriteRule里的捕获组变量,这里用了也不会生效。

这就导致只有访问根域名(不带路径)时规则偶然匹配,带路径的请求直接跳过规则,返回旧域名的404。

修正后的完整规则

替换你当前的代码为:

RewriteEngine On
# 匹配不带www和带www的旧域名,[NC]表示不区分大小写
RewriteCond %{HTTP_HOST} ^(www\.)?olddomain\.com$ [NC]
# 捕获所有请求路径,重定向到新域名的/blog/目录下
RewriteRule ^(.*)$ https://www.newdomain.com/blog/$1 [L,R=301]

规则细节解释

  • ^(www\.)?olddomain\.com$:精准匹配旧域名的两种形式(olddomain.com和www.olddomain.com),\.是转义的点号,避免匹配到类似olddomain.com.cn这样的域名。
  • [NC]:忽略域名的大小写,兼容用户输入OLDDOMAIN.COM这类情况。
  • ^(.*)$:捕获请求的完整路径(包括根目录的空字符串),比如/fun-blog-post/会被捕获为fun-blog-post/。
  • [L,R=301]:L表示这是最后一条规则,匹配后不再执行后续规则;R=301表示永久重定向,利于搜索引擎收录更新。

测试注意事项

测试时建议使用浏览器隐私窗口,避免之前的301缓存干扰结果。访问https://www.olddomain.com/fun-blog-post/应该直接跳转到https://www.newdomain.com/blog/fun-blog-post/。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 18:32:47