WordPress站点仅Safari浏览器出现HTTPS重定向循环问题
问题原因
- 你当前使用的
.htaccess301跳转规则存在场景兼容缺陷:当站点部署在CDN、反向代理(绝大多数虚拟主机默认架构都是Nginx反代Apache、CDN节点回源走HTTP)后,Apache服务本身收到的回源请求始终是HTTP协议,%{HTTPS}变量会永久返回off值。 - 仅Safari触发重定向循环是浏览器实现差异导致:
- Chrome、Edge等Chromium内核浏览器会自动识别代理层注入的
X-Forwarded-Proto协议标识,自动修正跳转逻辑,不会重复触发跳转;Safari的隐私防护机制默认会拦截非可信链路的转发头,导致Apache每次收到Safari的请求都判定为HTTP访问,返回301跳转到HTTPS地址,跳转后的请求到Apache层依然被识别为HTTP,形成死循环。 - Safari对301永久重定向采用本地强缓存策略,不会每次请求都校验服务端最新规则,初期配置正常时缓存的正确跳转逻辑,和后续规则识别异常的响应冲突后,会持续触发循环,Chromium内核的301缓存会随请求动态校验,不会卡在这个异常状态。
- Chrome、Edge等Chromium内核浏览器会自动识别代理层注入的
- 移除规则后恢复正常,是因为WordPress本身在后台将站点地址设置为HTTPS后,程序内置的跳转逻辑已经兼容代理场景的协议判断,不需要额外在服务端写跳转规则。
解决方案
按优先级选以下任意一种即可:
- 最稳定方案:直接删除你在
.htaccess中添加的这段HTTPS跳转规则,登录WordPress后台,在「设置-常规」页确认「WordPress地址(URL)」「站点地址(URL)」均为https://开头的全路径,开启强制HTTPS即可。如果担心后台配置遗漏,安装SSL插件自动处理全站点HTTPS兼容,不需要手动写服务端规则。 - 保留.htaccess规则的修正方案:将原有跳转规则替换为兼容反向代理/CDN的版本,替换代码如下:
<IfModule mod_rewrite.c> RewriteEngine on # 优先识别代理层转发的HTTPS协议标识 RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC] RewriteCond %{HTTPS} !=on [NC] RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] </IfModule>
替换完成后必须清理Safari本地缓存:打开Safari设置-隐私-管理网站数据,搜索对应站点域名,删除所有关联缓存数据后再测试访问,否则旧的301缓存会导致问题复现。
- CDN配置排查项:如果站点开启了第三方CDN服务,需要在CDN控制台将SSL加密模式设置为「完全(严格)」,不要使用「灵活」模式,灵活模式下CDN回源走HTTP,是触发这类跨浏览器跳转异常的常见诱因。
内容的提问来源于stack exchange,提问作者Renato Zanini
相关产品推荐
相关产品推荐

