如何通过.htaccess批量重定向特定模式的子域名URL?
解决shop.my-example.com/blog/*路径批量重定向问题
嘿,我来帮你搞定这个批量重定向的需求!你之前用的Redirect permanent /blog/ https://www.my-new-site.com/blog/是基于前缀的简单重定向,理论上应该能匹配所有/blog/开头的路径,但可能因为服务器配置冲突或者规则优先级问题,导致带分类和数字参数的子路径没生效。更可靠的方案是使用mod_rewrite规则,它能更灵活地匹配并保留完整路径。
具体实现代码
在你的.htaccess文件中添加以下规则(如果已经有RewriteEngine On,就不用重复加了):
RewriteEngine On # 仅针对shop.my-example.com的/blog/子路径进行重定向 RewriteCond %{HTTP_HOST} ^shop\.my-example\.com$ [NC] RewriteRule ^blog/(.*)$ https://my-new-site.com/blog/$1 [R=301,L]
规则解释
RewriteEngine On:启用mod_rewrite模块,这是所有重写规则的基础(如果文件里已经有这行,直接跳过即可)。RewriteCond %{HTTP_HOST} ^shop\.my-example\.com$ [NC]:检查请求的域名是否是shop.my-example.com,[NC]表示不区分大小写,避免因为大小写差异导致匹配失败。RewriteRule ^blog/(.*)$ https://my-new-site.com/blog/$1 [R=301,L]:^blog/(.*)$:匹配所有以blog/开头的路径,(.*)会捕获blog/之后的所有内容(比如my-cat/123)。https://my-new-site.com/blog/$1:将捕获到的内容$1替换到新域名的对应位置,实现路径完整保留。[R=301]:表示永久重定向(和你之前用的permanent效果一致),适合站点永久迁移的场景;如果是临时迁移,可以改成R=302。[L]:表示这是最后一条规则,匹配成功后不再处理后续规则,避免冲突。
注意事项
- 测试规则:可以直接在浏览器中访问
shop.my-example.com/blog/任意分类/任意数字,检查是否跳转到新域名的对应路径。 - 清除缓存:301重定向会被浏览器缓存,测试前建议使用无痕模式或者清除浏览器缓存,避免旧缓存影响测试结果。
- 确认mod_rewrite启用:如果是自己搭建的服务器,需要确保Apache已经启用mod_rewrite模块(大多数虚拟主机默认已经开启)。
内容的提问来源于stack exchange,提问作者J.BizMai
相关产品推荐
相关产品推荐

