微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

需要立即帮助网站以https:

如何解决需要立即帮助网站以https:

最近,到目前为止,我的网站尚不安全,因为它错误链接为https:,但到目前为止还不安全。不幸的是,无论我要什么,无论何时在google,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>

嗯,这不再起作用。似乎所有浏览器现在都具有以下行为:如果链接网站vai https://,则任何尝试通过http://加载它的尝试,即使在浏览器URL行上明确键入,都将失败。浏览器将不断将其更改为https:。那么这对我的页面有什么作用?它导致它不断地重新加载。显然,我可以删除上面的脚本,但是我也可以关闭站点,因为几乎没有任何内容可以正常工作。没有Cookie,没有图形,没有任何正常工作。甚至没有页面图标。

因此,我还尝试了.htaccess文件解决方案的反向操作,该解决方案通常用于强制使用https。我的版本看起来像这样...

RewriteEngine on
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ http://exampledomain/$1 [R=301,L]

显然“ exampledomain”是我的域。我不知道它是否在做任何意外的事情,但这肯定无济于事。

那我该怎么办?我意识到长期的解决方案是成为https。该建议目前无济于事。这是一个拥有超过100页的旧版网站。现在的情况如何,一旦有人通过错误的https:链接到达那里,他们将永远看不到任何东西。我现在有什么可以做的吗?

编辑...

服务器是否可能将其强加给我?我找到了这篇文章,并询问我的托管支持人员是否可以采取任何措施。如果没有,似乎托管公司向我出售了网站空间,如果我不升级的话,那么人们就无法访问。我可以做些测试看看我的托管公司是否正在执行此政策吗?

https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security

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

  1. 在我的主目录(文档根目录级别)中,技术支持人员添加了以下几行。虽然较低的3个类似于我尝试过的(有人建议),但没有上面的一行(显然阻止了HSTS),当浏览器坚持使用https时,正在生成一个无限循环。

    Header always unset Strict-Transport-Security
    RewriteEngine On
    RewriteCond %{HTTPS} on
    RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    
  2. 但是为什么 MY 浏览器“坚持”在HTTPS上?技术支持人员已经为自己验证了无限重定向的循环条件不再发生,但是无论是使用旧版还是更新版的机器,无论是在Firefox还是Chrome浏览器中,我仍然无法在家中访问我的页面。但是奇怪的是,IE和Edge确实起作用了,这使我意识到了区别……我不经常使用那些浏览器(检查兼容性),所以区别在于:尽管有清除缓存和cookie的建议,但显然没有这些选项确实刷新了历史记录。而且,如果HTTPS是最近的历史记录,则浏览器似乎会自动还原为该HTTPS。为此,我在下面的文章中找到了答案(至少对于那些浏览器而言)。真正清除历史记录后,就不再是问题。

https://www.thesslstore.com/blog/clear-hsts-settings-chrome-firefox/

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

解决方法

要将网站从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而完全无法连接。(尽管事实并非如此。)

OR

  • 服务器上安装了SSL证书,服务器在端口443上进行响应,但是该证书用于其他域/主机名,因此 browser 尝试连接时会发出警告。用户“不应”不接受此证书,在这种情况下,他们永远不会到达您的站点。

似乎所有浏览器现在都具有以下行为:如果您链接网站vai https://,则任何通过http://加载它的尝试,即使在浏览器URL行上明确键入,都将失败。浏览器将不断将其更改为https:

那不是真的,除非...

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

OR

  • 您先前已实现HSTS。在这种情况下,浏览器(最初访问HTTPS后)将始终请求HTTPS。这是不可逆的,直到max-age时间在用户访问您的“ HTTPS”网站后到期。但是,HSTS是一个深思熟虑的动作-确实不应该“偶然地”实施。 (如果SLL证书不是完全有效,浏览器会认可HSTS标头,我也会感到惊讶。)

    通过HTTPS访问站点时,请寻找Strict-Transport-Security HTTP响应标头。这表明HSTS已在您的网站上“实施”。


更新:

  1. 在我的主要文档(文档根目录级别)中,技术支持添加了以下几行....

    Header always unset Strict-Transport-Security
    RewriteEngine On
    RewriteCond %{HTTPS} on
    RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    

如果您必须显式unset的STS标头,则表明“其他”已经设置好了!默认情况下未设置此标头,因此最好首先找出它的位置/设置。 (Web主机本身绝不应设置这样的标头。)

另外:仅用(.*)来更改RewriteRule^ 模式)即可进行次要优化。由于不需要匹配或捕获URL路径,因此只需在 substitution 字符串中成功(因为您正在使用REQUEST_URI)。

  1. 但是为什么我的浏览器“保持”在HTTPS上? ...但是奇怪的是,IE和Edge确实起作用了,这使我意识到了区别...我没有 经常使用这些浏览器(检查兼容性除外),因此 区别是:尽管有人建议清除缓存和 Cookie,显然这些选项都无法真正清除历史记录。 如果HTTPS是最近的历史记录,浏览器似乎 自动恢复到那个。 ....一旦真正清除历史, 不再有问题。

浏览器的“历史记录”本身不会导致此问题,只是浏览器地址栏趋向于(有时烦人)自动完成最近访问过的URL。但这不会导致重定向循环。

因此,由此得出的结论是HSTS问题吗?您的域是否出现在chrome://net-internals/#hsts列表中以启用HSTS的域?但是,对于其他最近通过HTTPS访问您的网站的其他用户而言,这不能解决问题。他们将仍然被迫使用HTTPS,直到max-age参数确定的时间从他们上次访问过去起算为止。

要澄清:

  • 您的网站对我来说一切正常,...重定向回HTTP。
  • 您已经为主域和子域安装了有效的SSL证书!如果您不这样做,那么您将在通过HTTPS到达站点之前看到浏览器警告,并且浏览器将无法连接(不会发生重定向)-如上所述。
  • 您在Google中索引了许多HTTPS URL。如果可用,Google会倾向于HTTPS而不是HTTP。像您一开始所做的那样,对JavaScript进行“重定向”并不一定会劝阻Google。顺便说一句,JS重定向仅重定向运行脚本的主页。通过HTTPS请求的任何静态资源(图像,JS,CSS等)都不会被重定向。 JS重定向并不是严格意义上的重定向-到用户代理/搜索引擎,它只是另一个200 OK响应,而不是3xx响应。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。