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

如何配置.htaccess:除某域名所有子域外,全站重定向至HTTPS

解决多站点CMS中特定域名子域跳过HTTPS重定向的问题

嘿,这个问题本质上是调整Rewrite规则的优先级和匹配条件就能搞定的。你原来的规则是全局强制所有流量跳HTTPS,现在只需要先排除目标域名的所有子域,再执行全局重定向就行。

具体配置方案

假设你要排除的是 example.com 的所有子域(比如 sub1.example.com、sub2.example.com 这类),直接把下面的规则放在你的 .htaccess 或者Apache虚拟主机配置的最前面:

# 第一步:排除目标域名的所有子域(含主域名的话看下面的说明)
RewriteCond %{HTTP_HOST} \.example\.com$ [NC]
RewriteRule ^ - [L]

# 第二步:全局HTTPS重定向规则(原来的规则保留)
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

规则细节解释

  • RewriteCond %{HTTP_HOST} \.example\.com$ [NC]:匹配所有以 .example.com 结尾的主机名,[NC] 是不区分大小写的意思,确保像 .Example.Com 这类大小写混合的域名也能被正确排除。
  • RewriteRule ^ - [L]:这条规则表示“对匹配到的请求不做任何处理”,[L] 是Last的缩写,意思是执行完这条规则就停止后续所有Rewrite规则的处理,直接返回请求——这样就跳过了后面的HTTPS重定向。
  • 后面的全局重定向规则只会对不满足前面排除条件的域名生效,完美实现你的需求。

进阶调整:只排除子域,主域名仍需重定向

如果你的需求是:example.com 主域名还要继续强制HTTPS,只有它的子域跳过重定向,那把第一条RewriteCond改成下面的正则即可:

RewriteCond %{HTTP_HOST} ^[^.]+\.example\.com$ [NC]

这个正则的意思是“主机名必须包含至少一个点在 example.com 前面”,也就是匹配所有子域,而 example.com 本身不会被匹配到。

注意事项

  1. 规则顺序很重要:一定要把排除规则放在全局重定向规则的前面,否则全局规则会先生效,排除规则就没用了。
  2. 测试用临时重定向:建议先把 [R=301] 改成 [R=302] 来测试,确认配置没问题后再改回301永久重定向——避免浏览器缓存错误的重定向规则,给后续调试添麻烦。
  3. 和CMS规则的配合:如果你的CMS有自己的Rewrite规则(比如WordPress的 permalink 规则),请把这些HTTPS重定向规则放在CMS规则的最前面,确保优先级最高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:40:19