WordPress网站HTTPS重定向失效问题及正确重定向脚本咨询
解决GoDaddy主机上的全局HTTPS重定向问题
看起来你的WP Fastest Cache配置里的重定向逻辑搞反了——原脚本是当HTTPS已经开启时触发规则,但我们需要的是强制所有HTTP请求跳转到HTTPS。加上GoDaddy共享主机可能用反向代理的特殊情况,直接检测%{HTTPS}可能不准确,这也是Security Headers IO检测失败的核心原因之一。
下面是针对GoDaddy主机的两种可靠解决方案,优先推荐第二种(适配反向代理场景):
方案1:基础版(适用于直接支持HTTPS检测的环境)
先备份你的.htaccess文件,然后把这段规则放在所有其他规则(包括WP Fastest Cache的规则)最顶部——重定向规则必须优先执行,否则缓存插件的规则会先拦截请求:
# BEGIN Force HTTPS Redirect <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / # 拦截所有HTTP请求,跳转到对应HTTPS地址 RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] # 可选:强制所有请求使用www前缀(不需要的话删除下面两行) RewriteCond %{HTTP_HOST} !^www\. RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L] </IfModule> # END Force HTTPS Redirect
方案2:GoDaddy反向代理适配版(更可靠)
GoDaddy的共享主机很多用反向代理架构,此时%{HTTPS}变量会一直显示off,因为真正的SSL终止在代理层。这种情况下需要检测X-Forwarded-Proto头来判断是否是HTTPS请求:
# BEGIN Force HTTPS Redirect (GoDaddy Reverse Proxy Compatible) <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / # 通过反向代理的请求头检测HTTP请求,强制跳转HTTPS RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] # 可选:强制所有请求使用www前缀(不需要的话删除下面两行) RewriteCond %{HTTP_HOST} !^www\. RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L] </IfModule> # END Force HTTPS Redirect (GoDaddy Reverse Proxy Compatible)
关键注意事项:
- 规则顺序很重要:一定要把重定向规则放在WP Fastest Cache规则的前面,否则缓存插件的规则会先处理请求,导致重定向不生效。
- 重定向类型:
R=301是永久重定向,适合正式环境(利于SEO);如果还在测试,先用R=302临时重定向,确认没问题再改成301。 - 缓存清理:修改
.htaccess后,务必清除WP Fastest Cache的所有缓存,同时用Ctrl+F5强制刷新浏览器缓存来测试。 - 测试验证:直接访问
http://www.somebank.com(不带https),确认自动跳转到https://版本;再用Security Headers IO重新检测,应该就能通过HTTPS重定向的检查了。
内容的提问来源于stack exchange,提问作者Sandah Aung
相关产品推荐
相关产品推荐

