Javascript 需要站点的即时帮助以https形式加载http站点:

Javascript 需要站点的即时帮助以https形式加载http站点:,javascript,.htaccess,http,https,webserver,Javascript,.htaccess,Http,Https,Webserver,最近,我的网站“just http:”目前还不安全,但当它被错误链接为https:(事实并非如此)时,会出现多个问题。不幸的是,无论我想要什么,只要网站链接到谷歌、facebook或任何地方,这种情况都会发生。过去,我通过在页面顶部添加JavaScript成功地解决了这个问题 <script> // redirect if wrongly linked via https. if(window.location.href.indexOf("https") >

最近,我的网站“just http:”目前还不安全,但当它被错误链接为https:(事实并非如此)时,会出现多个问题。不幸的是,无论我想要什么,只要网站链接到谷歌、facebook或任何地方,这种情况都会发生。过去,我通过在页面顶部添加JavaScript成功地解决了这个问题

<script>
// redirect if wrongly linked via https.
if(window.location.href.indexOf("https") >= 0) {
  var loc = window.location.href;
  var newloc = loc.replace("https:","http:"); 
  window.location = newloc;
  }
</script>
显然,“exampledomain”是我的领域。我不知道它是否做了什么意想不到的事情,但它肯定没有帮助

那我该怎么办?我意识到长期的解决方案是成为https。这个建议现在没用。这是一个超过100页的传统网站。现在的情况是,一旦有人使用错误的https:link访问,他们将永远看不到任何内容。现在有什么我能做的吗

编辑…

有可能是服务器强迫我这么做的吗?我找到了这篇文章,并询问了我的主机支持是否可以做些什么。如果不是的话,托管公司可能会卖给我网络空间,然后如果我不升级,人们就无法访问。是否有任何测试,我可以做,看看这项政策是否正在执行我的托管公司

编辑:我终于让我的网站重新上线了。我不是在“回答”我自己的问题,因为我强烈怀疑即使现在我的答案也不完整。但我们做了两件事:

  • 在my main(文档根级别)中,技术支持添加了这些行。虽然下面的3类似于我尝试过的东西(你们中的一个建议),但没有顶行(显然阻止了HST),当浏览器坚持使用https时,产生了一个无限循环

    Header always unset Strict-Transport-Security
    RewriteEngine On
    RewriteCond %{HTTPS} on
    RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    
  • 但是为什么我的浏览器坚持使用HTTPS呢?技术支持人员已经亲自验证了无限重定向的循环条件不再发生,但我仍然无法从家中访问我的页面,无论是在我的firefox浏览器还是chrome浏览器中,还是在我的旧的或新的机器上。但奇怪的是,IE和Edge确实起了作用,这让我意识到了两者的区别。。。我不经常使用这些浏览器(除了检查兼容性),所以区别在于:尽管有清除缓存和cookie的建议,但显然这些选项都不能真正刷新历史记录。如果HTTPS出现在最近的历史中,浏览器似乎会自动恢复到那个版本。为此,我在下面的文章中找到了答案(至少对于那些浏览器)。一旦历史被真正澄清,问题就不再存在了


  • 我想我还没有看到这个问题的最后一面,是的。。。最终我将跳转到HTTPS。我只是不喜欢在强制压力下这样做,因为内部服务器策略已更改。

    要将网站从HTTPS重定向到HTTP,请在网站的.htaccess文件中添加以下规则:

    # Redirect HTTPS to HTTP
    RewriteCond %{HTTP:X-Forwarded-Proto} =https
    RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    

    要将网站从HTTPS重定向到HTTP,请在网站的.htaccess文件中添加以下规则:

    # Redirect HTTPS to HTTP
    RewriteCond %{HTTP:X-Forwarded-Proto} =https
    RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    
    不。。。我没有SSL证书

    您需要SSL证书。如果未安装覆盖请求主机名的SSL证书,则:

    • 服务器无法连接,因为它没有侦听端口443。(尽管情况似乎并非如此。)
    或者

    • 服务器上安装了SSL证书,服务器在端口443上响应,但证书用于不同的域/主机名,因此浏览器在尝试连接时发出警告。用户“不应该”接受此证书,在这种情况下,他们永远不会到达您的站点
    似乎所有浏览器现在都有以下行为:如果您链接一个站点vai https://,则任何通过http:///加载它的尝试,甚至在浏览器URL行上显式键入,都将失败。浏览器将不断将其更改为https:

    那不是真的,除非

    • 您之前已经实现了HTTP到HTTPS 301重定向,并且看到了缓存响应/重定向
    或者

    • 您以前实现过。在这种情况下,浏览器(最初访问HTTPS后)将始终请求HTTPS。这是不可逆的,直到用户访问您的“HTTPS”站点后
      最长期限
      时间到期。但是HSTS是一个深思熟虑的行为——这真的不应该是“偶然”实现的。(如果SLL证书不完全有效,浏览器会尊重HSTS标题,我也会感到惊讶?!)

      通过HTTPS访问站点时,请查找
      严格的传输安全性
      HTTP响应头。这表明HST已在您的站点上“实施”


    更新:

  • 在my main(文档根级别)中,技术支持添加了以下行

    Header always unset Strict-Transport-Security
    RewriteEngine On
    RewriteCond %{HTTPS} on
    RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    
  • 如果您必须显式地
    取消设置
    STS头,那么它表明“其他东西”已经在设置它了!?默认情况下不会设置此标题,因此最好首先找出设置它的位置/内容。(web主机本身不应设置这样的标头。)

    旁白:通过更改
    (.*)
    重写规则
    模式)只需
    ^
    ,即可实现轻微优化。因为您不需要匹配或捕获URL路径,所以它只需要在替换字符串中成功(因为您正在使用
    REQUEST\u URI

  • 但为什么我的浏览器“坚持”使用HTTPS呢。。。但奇怪的是,IE和Edge确实起了作用,这让我意识到了两者的区别。。。我不 经常使用这些浏览器(检查兼容性除外),因此 区别在于:尽管有清除缓存和 cookies,显然这些选项都没有真正刷新历史。 如果HTTPS出现在最近的历史中,那么浏览器似乎 自动恢复到那个。。。。历史一旦真正澄清,, 不再有问题了