您当前没有 HTTP 到 HTTPS 重定向.htaccess
对您发布的内容进行编码,因此任何人都可以猜测为什么它对您不起作用。
但是你需要在你的顶部添加类似下面的内容.htaccess
,紧接着RewriteBase
指示:
RewriteCond %{HTTPS} off
RewriteRule (.*) https://www.example.com/$1 [R=301,L]
这是“标准”HTTP 到 HTTPS 的重定向。但是,这是否有效(并导致重定向循环)可能取决于服务器上如何管理/实现 HTTPS。例如,您是否使用前端代理(例如 Cloudflare FREE)来管理您的 SSL?
如果您使用前端代理,那么您可能需要将其更改为:
RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC]
RewriteRule (.*) https://www.example.com/$1 [R=301,L]
或者,某些共享主机使用HTTPS
环境变量,而不是HTTPS
server变量,如第一个示例中使用的:
RewriteCond %{ENV:HTTPS} off
RewriteRule (.*) https://www.example.com/$1 [R=301,L]
EDIT: This 相关问题从 2017 年开始,建议与主机“123-reg”使用类似的内容(已收到 123-reg 自己的回复)。他们已经使用了条件模式 !=on
,这应该没有什么区别,除非 123-reg 做了一些有点奇怪的事情?!这HTTPS
环境(并且类似地命名server) 变量应包含字符串“off”或“on”。所以,你是否检查并不重要off
or !on
- 结果should是相同的。
注意:首先使用 302(临时)重定向进行测试,以确保其正常工作 - 这是为了避免任何潜在的缓存问题。在测试之前您需要清除浏览器缓存。
UPDATE:该网站与 123-reg 共享托管
这个 123-reg 支持页面 states:
在我们的 Linux 共享主机帐户上,当连接受 SSL 保护时,将设置环境变量 SSL。
如果是这种情况,那么您应该能够执行以下操作:
RewriteCond %{ENV:SSL} ^$
RewriteRule (.*) https://www.example.com/$1 [R=301,L]
如果以上内容重定向到 HTTPSSSL
env var 为空(即未设置)。