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

Apache服务器HTACCESS配置:仅非Cloudflare请求HTTP转HTTPS

Apache .htaccess 配置:仅对非Cloudflare请求强制HTTPS重定向

你的场景是服务器同时托管两类站点:一类通过Cloudflare代理服务(Cloudflare向服务器发起的是HTTP请求,但浏览器端显示HTTPS),另一类直接对外提供服务。需要实现仅当请求不来自Cloudflare时,才将HTTP重定向至HTTPS,避免Cloudflare请求触发无限循环。

你之前的配置出错是因为用错了Apache变量:%{ENV:HTTP_CDN_LOOP}是访问环境变量的写法,而要读取请求头,应该用%{HTTP:Header-Name}的格式(请求头中的横杠替换为冒号)。以下是几种可靠的配置方案:

方案一:通过CDN-LOOP请求头判断

利用Cloudflare请求携带的CDN-LOOP头(对应PHP$_SERVER里的HTTP_CDN_LOOP),配置如下:

RewriteEngine On

# 仅对非Cloudflare的HTTP请求执行HTTPS重定向
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:CDN-LOOP} !cloudflare [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [NE,R=301,L]
  • [NC]:不区分大小写,避免请求头值大小写不一致导致判断失效
  • R=301:永久重定向,测试阶段建议改用R=302临时重定向,避免浏览器缓存影响调试
  • NE:不转义URL中的特殊字符
  • L:执行完这条规则后终止后续重写规则

方案二:通过CF-RAY请求头判断

Cloudflare代理的请求都会携带专属的CF-RAY头,通过检测该头是否存在来判断请求来源,稳定性更高:

RewriteEngine On

RewriteCond %{HTTPS} off
# 仅当请求头中没有CF-RAY时(非Cloudflare请求)执行重定向
RewriteCond %{HTTP:CF-RAY} ^$
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [NE,R=301,L]

补充说明

  • Cloudflare向服务器发起的请求中,X-Forwarded-Proto头会标识浏览器端的协议(比如https),这也可以辅助验证请求是否来自Cloudflare,但上面两种方案已经足够覆盖需求。
  • 配置完成后,建议用工具模拟非Cloudflare的HTTP请求测试重定向是否生效,同时确认Cloudflare代理的请求不会触发重定向,避免无限循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:01:20