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

使用.htaccess实现全站HTTPS重定向,仅排除子域单个页面

解决方案:.htaccess实现主域/子域全站HTTPS,仅指定子域页面强制HTTP

刚好处理过类似的场景,结合Cloudflare托管SSL的特性,我们可以通过调整.htaccess的规则顺序来完美实现你的需求——先让例外页面强制走HTTP,再让其他所有页面强制HTTPS,这样就不会出现规则冲突的问题了。

第一步:先对子域的特定页面强制HTTP

这个规则一定要放在最前面,这样它会优先匹配,避免被后面的HTTPS重定向规则覆盖。假设你要例外的页面是demo.mysite.com/iframe-loader.php,请替换成你实际的页面路径:

RewriteEngine On

# 强制demo子域的指定页面使用HTTP
RewriteCond %{HTTP_HOST} ^demo\.mysite\.com$ [NC]
RewriteCond %{REQUEST_URI} ^/iframe-loader\.php$ [NC]
# 检查是否是HTTPS访问(包含Cloudflare转发的场景)
RewriteCond %{HTTPS} on [OR]
RewriteCond %{HTTP:CF-Visitor} '"scheme":"https"' [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

规则说明:

  • %{HTTP_HOST}和%{REQUEST_URI}的条件用来精准匹配你要例外的子域和页面,[NC]表示不区分大小写,容错性更强
  • 因为Cloudflare会把HTTPS请求转发到你的服务器时用HTTP协议,所以额外加了CF-Visitor头的检查,确保能正确识别用户实际的访问协议
  • [L]表示匹配到这个规则后就停止后续规则的执行,避免被后面的HTTPS重定向覆盖;R=301是永久重定向,测试阶段可以改成R=302临时重定向,确认规则没问题后再换回来

第二步:对主域和子域的其他页面强制HTTPS

在上面的例外规则之后,添加全站HTTPS的重定向规则:

# 强制主域和demo子域的其他所有页面使用HTTPS
RewriteCond %{HTTPS} off [AND]
RewriteCond %{HTTP:CF-Visitor} !'"scheme":"https"' [NC]
RewriteCond %{HTTP_HOST} ^(www\.mysite\.com|demo\.mysite\.com)$ [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

规则说明:

  • 这里用[AND]同时检查服务器收到的请求是HTTP,且用户实际访问的不是HTTPS,避免出现重复重定向的问题
  • %{HTTP_HOST}的条件同时匹配主域和子域,确保这两个域名下的所有页面(除了前面指定的例外)都强制跳转HTTPS

额外注意事项

  • 如果有多个需要例外的页面,可以修改REQUEST_URI的条件,用正则匹配多个路径,比如^/(iframe-loader|embed-page)\.php$
  • 确保你的服务器已经启用了mod_rewrite模块,否则这些规则不会生效
  • 修改.htaccess后,记得清除Cloudflare的缓存,或者等待缓存过期,避免旧规则仍然生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:11:18