Apache配置htaccess规则实现指定HTTP地址不跳转HTTPS
首先说明你之前规则失效的核心原因:
Apache的%{HTTP_HOST}变量仅存储请求的域名部分,不包含http/https协议前缀,也没有路径相关的斜杠字符,所以你编写的带http:\\前缀的匹配规则完全无法命中任何请求,自然无法实现预期逻辑。
正确的.htaccess重写规则
RewriteEngine On # 放行http协议访问裸域名example.com的请求,不触发重定向 RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST} ^example\.com$ [NC] RewriteRule ^ - [L] # 放行已经是目标地址https://www.example.com的请求,避免死循环 RewriteCond %{HTTPS} on RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC] RewriteRule ^ - [L] # 其余所有请求统一重定向到HTTPS的www域名版本 RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301,NE]
规则说明
NC参数表示匹配域名时不区分大小写- 前两段规则会直接跳过你要求保留的
http://example.com场景、以及已经访问到目标地址的场景,不会触发跳转 - 最后一条规则命中所有剩余请求,统一跳转至目标地址,
NE参数用于避免URL中的特殊字符被意外转义 - 如果你还在调试阶段,可以先把
R=301改为R=302使用临时重定向,避免浏览器缓存旧规则导致调试异常
内容的提问来源于stack exchange,提问作者rapcat
相关产品推荐
相关产品推荐

