有没有办法检测HTTP或HTTPS,然后强制使用HTTPS与JavaScript?

我有一些检测HTTP或HTTPS的代码,但我不能强迫它使用HTTPS:。

我使用window.location.protocol属性将站点设置为https:然后刷新页面,希望重新加载加载到浏览器中的新的https'ed URL。

if (window.location.protocol != "https:") {
   window.location.protocol = "https:";
   window.location.reload();
}

当前回答

试试这个

if (location.protocol !== 'https:') {
    location.replace(`https:${location.href.substring(location.protocol.length)}`);
}

的位置。Href = blah将这个重定向添加到浏览器历史记录中。如果用户点击返回按钮,他们将被重定向回同一页面。最好使用位置。替换,因为它不会将此重定向添加到浏览器历史记录。

其他回答

试试这个

if (location.protocol !== 'https:') {
    location.replace(`https:${location.href.substring(location.protocol.length)}`);
}

的位置。Href = blah将这个重定向添加到浏览器历史记录中。如果用户点击返回按钮,他们将被重定向回同一页面。最好使用位置。替换,因为它不会将此重定向添加到浏览器历史记录。

这个怎么样?

if (window.location.protocol !== 'https:') {
    window.location = 'https://' + window.location.hostname + window.location.pathname + window.location.hash;
}

不过,理想情况下,您应该在服务器端进行此操作。

不是Javascript的方式来回答这个问题,但如果你使用CloudFlare,你可以编写页面规则,重定向用户更快到HTTPS,这是免费的。在CloudFlare的页面规则中是这样的:

你可以:

  <script type="text/javascript">        
        if (window.location.protocol != "https:") {
           window.location.protocol = "https";
        }
    </script>

我刚刚用Pui Cdm测试了所有的脚本变体,包括上面的答案和许多其他使用php, htaccess,服务器配置和Javascript的答案,结果是脚本

<script type="text/javascript">        
function showProtocall() {
        if (window.location.protocol != "https") {
            window.location = "https://" + window.location.href.substring(window.location.protocol.length, window.location.href.length);
            window.location.reload();
        }
    }
    showProtocall();
</script> 

由vivek-srivastava提供 效果最好,您可以在Java脚本中添加进一步的安全性。