如何通过.htaccess将旧子域名URL重定向至新子域名?
子域名URL重定向问题
根目录下的.htaccess重定向代码已正常生效,现需将旧子域名info.oldsite.co.uk下的所有URL(如https://info.oldsite.co.uk/blog/some-blog-post-a)重定向至新子域名info.NEW111NEW.com的对应路径。此前尝试三种配置均存在问题:
- 配置1完全无效
- 配置2完全无效
- 配置3仅部分生效:非/blog路径出现循环重定向,/blog路径出现双斜杠
//异常
已生效的根目录.htaccess代码
RewriteEngine on RewriteCond %{HTTP_HOST} ^oldsite.co.uk [NC,OR] RewriteCond %{HTTP_HOST} ^www.oldsite.co.uk [NC] RewriteRule ^(.*)$ https://www.NEW111NEW.com/$1 [L,R=301,NC]
尝试过的无效/部分生效配置
配置1(完全无效)
RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^info.oldsite.co.uk [NC] RewriteRule ^blog/(.*) http://info.NEW111NEW.com/blog/$1 [L,R=301,NC]
配置2(完全无效)
RewriteEngine on RewriteBase / RewriteCond %{HTTP_HOST} ^(info\.)?oldsite\.co\.uk$ [NC] RewriteRule ^(.*)$ http://info.NEW111NEW.com/blog/$1 [R=302,L]
配置3(部分生效)
RewriteEngine on RewriteBase / RewriteCond %{HTTP_HOST} ^info\.oldsite\.co\.uk [NC] RewriteRule ^(.*)$ https://info.new.com/blog/$1 [L,R=301,NC]
正确的重定向配置
问题根源分析
- 配置1:仅匹配
/blog/开头的路径,非/blog路径未处理,导致大部分请求无重定向。 - 配置2:正则同时匹配主域名和info子域名,但重定向目标硬拼接
/blog/,强制所有路径转到/blog下,逻辑错误。 - 配置3:目标域名写错为
info.new.com(应为info.NEW111NEW.com),且硬加/blog/前缀,原路径带/blog时会出现重复路径(如/blog/blog/xxx),非/blog路径因域名错误或新站配置问题引发循环重定向。
正确配置代码
将以下规则放在根目录已生效的重定向规则之前:
# 处理info子域名的永久重定向 RewriteEngine on RewriteCond %{HTTP_HOST} ^info\.oldsite\.co\.uk [NC] RewriteRule ^(.*)$ https://info.NEW111NEW.com/$1 [L,R=301,NC]
配置说明
- 规则顺序:放在主域名重定向规则前,确保info子域名的请求优先被匹配,不会被主域名规则拦截。
- 精准匹配:
%{HTTP_HOST} ^info\.oldsite\.co\.uk只匹配旧info子域名,不影响主域名或其他子域名。 - 路径映射:
^(.*)$捕获完整原路径,$1将其完整映射到新子域名,保证路径完全对应,避免双斜杠或额外路径问题。 - 标记说明:
[L]表示匹配后停止后续规则,[R=301]为永久重定向(利于搜索引擎收录),[NC]忽略大小写匹配。
测试建议
- 先使用
R=302临时重定向测试,确认所有路径跳转正常后,再改为R=301永久重定向。 - 检查新子域名
info.NEW111NEW.com的服务器配置,确保没有反向重定向回旧域名,避免循环。
内容的提问来源于stack exchange,提问作者Nurul Huda
相关产品推荐
相关产品推荐

