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

.htaccess配置子域名通配301重定向 不影响主域名跳转规则

问题根因

你遇到的规则互串问题来自三个配置错误:

  1. 跨模块执行顺序冲突:你用mod_alias模块的Redirect指令写主域名的/service跳转,用mod_rewrite模块写子域名跳转,Apache中不同模块的执行优先级不按配置文件里的书写顺序走,很容易出现子域名请求先被Redirect规则拦截的情况。
  2. 主域名跳转规则无Host校验:Redirect指令会匹配所有域名下的对应路径,不管请求是来自主域名还是location子域名,只要路径是/service/就会触发跳转,这就是子域名下/service路径被错跳的核心原因。
  3. 子域名跳转规则本身有缺陷:一是跳转目标没带https://协议头,会被Apache识别为当前域名下的相对路径,导致跳转地址错误;二是规则拼接了原请求URI,会把/service这类路径带到跳转后的地址里,不符合你所有子域名页面统一跳转到新域名/location首页的需求。
正确配置

把所有重定向规则统一用mod_rewrite实现,严格按「先子域名规则、后主域名规则」的顺序书写,利用L标志实现匹配即终止,避免规则互串,完整配置如下:

RewriteEngine On

# 处理location子域名的所有请求:任意路径都301跳转到新域名/location页面
RewriteCond %{HTTP_HOST} ^location\.example\.com$ [NC]
RewriteRule ^ https://new-example.com/location [R=301,NC,L,QSA]

# 保留主域名原有的/service路径跳转逻辑,仅主域名请求会触发该规则
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
RewriteRule ^service/?$ https://new-example.com/service [R=301,NC,L,QSA]

配置前请把原来写的Redirect 301 /service/ https://new-example.com/service这行规则删掉,避免冲突。

配置说明
  • 所有规则统一走mod_rewrite模块,执行顺序完全按配置文件的书写顺序从上到下匹配,彻底解决跨模块优先级混乱的问题
  • 子域名规则放在最顶部,只要请求的Host是location.example.com,不管访问的是根路径、/service还是其他任意子路径,都会直接跳转到指定的新地址,匹配后通过L标志终止后续所有规则执行,完全不会触碰到主域名的跳转逻辑
  • 主域名的/service规则新增了Host校验,只有请求来自主域名(默认兼容带www和不带www两种形式,不需要可以自行删掉(www\.)?部分)时才会触发跳转,完全保留你原有的主域名重定向逻辑
  • 子域名跳转不再拼接原请求URI,所有子域名下的页面都会统一跳转到新域名的/location首页,符合你的迁移预期
  • 规则修改完成后,请先清空浏览器的301重定向缓存再做测试,之前错误跳转产生的持久化缓存会影响验证结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:54:24