的.htaccess重定向浏览器只有警告后执行(.htaccess redirect only ex

2019-06-26 12:39发布

我有这迫使HTTPS和www重写规则。 SSL证书是网站的WWW版本。 整个网站需要HTTPS。

问题是,如果请求https://example.com/浏览器显示之前重定向可以执行一个警告页面。 (“此连接不受信任”在Firefox和“这可能不是您要查找的网站!”在Chrome)

如果用户将在Firefox异常或忽略Chrome的错误,重写规则执行和他们重定向到该网站的WWW版采用了100%的安全页面。

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/

我怎样才能获得重定向浏览器的警告之前执行?

Answer 1:

从重定向https://example.comhttps://www.example.com客户端已取得初步成功的请求后,才会发生https://example.com

这是因为是HTTPS上的HTTP TLS / SSL(参见RFC 2818 ),该第一建立SSL /任何HTTP通信之前TLS连接发送。 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.comwww.example.com 。 这可以通过让多个主题备用名称(SAN)的DNS条目的证书(它不会只是工作实现*.example.com ,因为该点不是通配符模式的一部分)。

后者当然是最简单的解决方案。 这是很常见的的CA颁发有两个SAN条目证书example.comwww.example.com当你申请一个或另一个,有时并没有额外的费用。



Answer 2:

这篇文章解决您的问题,并提供了以下答案:

如果你想避免无效的证书问题,你需要的example.com一个证书。 出于安全原因,重定向不允许之前的认证。

另一种选择可能是让一个通配符证书,这样可以让你以匹配*.example.com (显然,这是行不通的。谢谢@Giel)

你可以做http://example.com/重定向到https://www.example.com/ ,但可能不会帮助你,如果你已经有用户访问https://example.com/



文章来源: .htaccess redirect only executes after browser warning