Apache 阻止http页面重定向到https页面

Apache 阻止http页面重定向到https页面,apache,ssl,browser,https,hsts,Apache,Ssl,Browser,Https,Hsts,我有一个网站(userbob.com),通常将所有页面作为https提供服务。但是,我试图让一个子目录(userbob.com/tools/)始终作为http提供内容。目前,Chrome的HSTS功能(我不知道它是如何工作的)似乎迫使我的网站页面通过https加载。我可以去chrome://net-internals/#hsts 并从Chrome的HSTS集合中删除我的域,下一个查询将按照我的意愿工作,而无需重定向到https版本。但是,如果我再次尝试加载页面,它最终会再次重定向。我能让它工作的

我有一个网站(userbob.com),通常将所有页面作为https提供服务。但是,我试图让一个子目录(userbob.com/tools/)始终作为http提供内容。目前,Chrome的HSTS功能(我不知道它是如何工作的)似乎迫使我的网站页面通过https加载。我可以去chrome://net-internals/#hsts 并从Chrome的HSTS集合中删除我的域,下一个查询将按照我的意愿工作,而无需重定向到https版本。但是,如果我再次尝试加载页面,它最终会再次重定向。我能让它工作的唯一方法就是去chrome://net-internals/#hsts 并在每次请求后从Chrome的HSTS集中删除我的域。如何让浏览器知道我希望userbob.com/tools/中的所有页面都作为http加载?我的站点使用apache/tomcat web服务器


(仅供参考,我希望tools目录中的页面通过http而不是https提供页面服务的原因是,其中一些页面旨在对http页面进行帧化。如果我尝试从https页面对http页面进行帧化,最终会出现混合内容错误。)

您可以使用重写规则将https请求重定向到子目录内的http。在
tools
目录中创建
.htaccess
文件,并添加以下内容:

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

请确保启用了apache
mod_rewrite

HTTP严格传输安全(或HSTS)是您的站点可以发送到浏览器的一种设置,上面写着“我只想在我的站点上使用HTTPS-如果有人试图转到HTTP链接,请在发送请求之前自动将其升级为HTTPS”。它基本上不允许您发送任何HTTP流量,无论是意外还是有意

这是一个安全特性。HTTP流量可以被拦截、读取、更改并重定向到其他域。仅限HTTPS的网站应将HTTP流量重定向到HTTPS,但如果最初仍通过HTTP发送任何请求,则会出现各种安全问题/攻击,因此HSTS可防止这种情况

HSTS的工作方式是,您的网站发送一个HTTP头
严格的传输安全
,其值为,例如
max age=31536000;在HTTPS请求中包含子域
。在本例中,浏览器将缓存该信息并激活HST 31536000秒(1年)。您可以在浏览器web开发人员工具中或使用类似的网站来查看此HTTP头。通过使用
chrome://net-internals/#hsts
site您可以清除该缓存并再次允许HTTP通信。但是,一旦您通过HTTPS访问站点,它将再次发送标题,浏览器将恢复为仅HTTPS

因此,要永久删除此设置,您需要停止发送
Strict Transport Security
标题。在Apache/Tomcat服务器中找到并关闭它。或者最好将其更改为
max age=0;先包含子域一段时间(这会告诉浏览器在0秒后清除缓存,因此无需访问
chrome://net-internals/#hsts
,只要您通过HTTPS访问站点以获取此标题,然后完全删除标题

关闭HST后,您可以恢复使用HTTPS上的一些页面,以及使用标准重定向的HTTP上的一些页面

然而,如果我不提醒您不要再使用HTTP,那将是我的失职。HTTPS是新标准,目前普遍鼓励所有网站使用HTTPS,并惩罚那些不使用HTTPS的网站。有关更多信息,请阅读他的帖子:


虽然你是正确的,你不能在HTTPS页面上设置HTTP内容,但是你应该考虑是否有另一种方法来解决这个问题。你的网站上的一个HTTP页面会导致安全问题,比如泄露cookies(如果没有正确设置)。加上帧是可怕的,不应该再使用了:

基本上任何浏览器都不应接受来自HTTPS请求的任何HTTP 301响应,这些响应指示目标重定向到HTTP,这些服务器这样做显然违反了基本安全性,或者被分别压缩。 但是,对HTTPS请求的301回复仍然可以重定向到另一个HTTPS目标(包括在另一个域上,前提是满足其他CORS要求)

如果浏览HTTPS链接(或javascript事件处理程序),浏览器开始加载HTTPS目标,该目标以301重定向到HTTP进行响应,则浏览器的行为应类似于500服务器错误或连接故障(DNS名称未解析,服务器未响应超时)

这种服务器端重定向显然是无效的。网站管理员不应该这样做!如果他们想关闭一个服务并通知HTTPS用户该服务托管在其他地方并且不再安全,他们必须返回一个有效的HTTPS响应页面,并且根本没有重定向,这应该是一个4xx错误页面(很可能是404页面未找到),他们不应该重定向到另一个HTTPS服务(例如,第三方托管的搜索引擎或停车页面)不遵守CORS要求,或发送虚假媒体类型(不遵守所请求的语言并以另一种语言显示该页面是可以接受的)

实现HST的浏览器是完全正确的,并且朝着正确的方向发展。但我真的认为CORS规范是一团糟,只是经过调整,仍然允许广告网络托管和控制他们向其他网站播放的广告

我强烈认为,严肃的网站仍然希望显示广告(或任何用于衡量受众的跟踪器)出于正当理由,这些广告/跟踪器可以在自己的域中以相同的协议托管:服务器仍然可以通过自己下载/刷新这些广告并维护自己的本地缓存来获得想要播放的广告内容。他们可以通过收集需要的数据来跟踪自己的受众