.htaccess 重定向仅在浏览器警告后执行
Posted
技术标签:
【中文标题】.htaccess 重定向仅在浏览器警告后执行【英文标题】:.htaccess redirect only executes after browser warning 【发布时间】:2012-07-23 07:43:38 【问题描述】:我有一个强制 HTTPS 和 www 的重写规则。 SSL 证书适用于网站的 www 版本。整个站点需要是 HTTPS。
问题是如果请求是https://example.com/,浏览器会在重定向执行之前显示一个警告页面。 (Firefox 中的“此连接不受信任”和 Chrome 中的“这可能不是您要查找的站点!”)
如果用户在 Firefox 中添加异常或在 Chrome 中忽略错误,则会执行重写规则并将他们重定向到具有 100% 安全页面的网站的 www 版本。
RewriteEngine on
RewriteCond %HTTP_HOST ^example.com$ [OR]
RewriteCond %HTTPS !on
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
RewriteCond %HTTP_HOST ^www.example.com$
RewriteCond %HTTPS !on
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
我一直在测试网站上的规则以及http://martinmelin.se/rewrite-rule-tester/
如何在浏览器警告之前执行重定向?
【问题讨论】:
见:serverfault.com/a/360985/47187 Redirect https to non-www and http to www 的可能重复项。 这个问题可能是重复的,但我认为这里的问题说得更清楚一些,恕我直言。 如果您搜索“certificate ssl www non-www”(在 SO、SF 或 Webmasters.SE 上),会有很多问题,但我想其中一些问题确实并不完全清楚。 【参考方案1】:This post 解决您的问题,并提供以下答案:
如果您想避免无效证书问题,您将需要 example.com 的证书。出于安全原因,不允许在身份验证之前进行重定向。
另一种选择可能是获取通配符证书,这将允许您匹配 (显然这不起作用。谢谢@Giel)*.example.com
。
您可以将http://example.com/
重定向到https://www.example.com/
,但如果您已经有用户访问https://example.com/
,这可能对您没有帮助。
【讨论】:
一个通配符证书是不够的,你需要 example.com 和 *.example.com 因为后者与前者不匹配。【参考方案2】:从https://example.com
到https://www.example.com
的重定向只能在客户端向https://example.com
发出初始成功请求后发生。
这是因为 HTTPS 是基于 TLS/SSL 的 HTTP(请参阅 RFC 2818),它首先建立 SSL/TLS 连接,然后再发送任何 HTTP 流量。 mod_rewrite
将始终在 SSL/TLS 连接建立后应用。不这样做实际上是一个安全问题,因为攻击者可以在证书被验证之前重写和重定向客户端。即使 TLS 升级是在 HTTP(RFC 2817,实际上从未使用/支持且不是 https)中进行的,您仍然希望重定向来自受信任的实体。
要使此初始连接正常工作,https://example.com
的服务器必须具有对 example.com
有效的证书,否则,此连接甚至不会发生(并且服务器不会发送重定向响应)。
为实现您的目标,您需要请求https://example.com
提供对example.com
有效的证书,并请求https://www.example.com
提供对www.example.com
有效的证书。
有两种解决方案:
通过使用不同的 IP 地址或使用服务器名称指示,为每个主机使用两个不同的证书。这里的缺点是并非所有客户端都支持 SNI,即使它越来越普遍。 使用对example.com
和www.example.com
均有效的单一证书。这可以通过获取具有多个主题备用名称 (SAN) DNS 条目的证书来实现(它不能仅与 *.example.com
一起使用,因为点不是通配符模式的一部分)。
后者当然是最简单的解决方案。当您申请其中一个或另一个时,CA 颁发包含example.com
和www.example.com
的 SAN 条目的证书是很常见的,有时无需额外费用。
【讨论】:
注意:大多数通配符证书包括*.example.com
和example.com
以上是关于.htaccess 重定向仅在浏览器警告后执行的主要内容,如果未能解决你的问题,请参考以下文章