通过.htaccess实现旧域名全页面重定向至新域名时的异常问题求助
解决.htaccess旧域名全页面重定向到新域名路径的问题
看起来你的重定向规则问题出在RewriteCond的匹配逻辑上,咱们一步步拆解修复:
问题根源分析
你原来的规则里,RewriteCond %{HTTP_HOST} ^olddomain.com/$1 犯了两个关键错误:
%{HTTP_HOST}变量只包含域名部分(比如www.olddomain.com),完全不包含请求路径(比如/fun-blog-post/),所以你在后面加/$1是无效的,永远匹配不到带路径的请求。- 在
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
相关产品推荐
相关产品推荐

