.htaccess仅HTTP可重定向到www,HTTPS失效(Cloudflare环境)
Cloudflare环境下实现全场景HTTPS+www重定向的.htaccess配置
当前配置仅能处理http://example.com到https://www.example.com的重定向,但https://example.com无法跳转至www版本,原因是原规则仅匹配非443端口(HTTP请求),且该规则对Cloudflare集成是必要的,移除会导致重定向循环。以下是修改后的配置,可覆盖所有场景且兼容Cloudflare:
RewriteEngine On # 处理非HTTPS请求,重定向至HTTPS+www(适配Cloudflare反向代理) RewriteCond %{HTTP:X-Forwarded-Proto} !https [OR] RewriteCond %{SERVER_PORT} !=443 RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L] # 处理HTTPS下的非www域名,重定向至www版本 RewriteCond %{HTTP:X-Forwarded-Proto} https [OR] RewriteCond %{SERVER_PORT} =443 RewriteCond %{HTTP_HOST} ^example\.com$ [NC] RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
配置说明:
- 第一条规则:同时校验Cloudflare转发的
X-Forwarded-Proto头(识别用户实际发起的请求协议)和源站的SERVER_PORT,只要任一条件表明当前为HTTP请求,就触发重定向。这样既适配Cloudflare反向代理场景(源站收到的可能是HTTP请求,即便用户用HTTPS访问),也兼容直接访问源站的情况。 - 第二条规则:先确认当前请求为HTTPS(通过Cloudflare头或源站端口),再匹配不带www的域名
example.com,触发重定向至www版本,解决https://example.com无法跳转的问题。 - [NC]标记:忽略域名大小写,避免因大小写差异导致规则失效。
- [R=301,L]标记:
301为永久重定向,利于搜索引擎优化;L表示执行当前规则后停止后续规则解析,避免冲突。
该配置不会引发重定向循环:当请求已为https://www.example.com时,两条规则的条件均不满足,不会触发任何重定向操作。
内容的提问来源于stack exchange,提问作者Ilan
相关产品推荐
相关产品推荐

