Jon*_*han 9 .htaccess mod-rewrite http
我有一个强制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]
Run Code Online (Sandbox Code Playgroud)
我一直在测试网站上的规则以及http://martinmelin.se/rewrite-rule-tester/
如何在浏览器警告之前获取重定向?
从https://example.com到的重定向https://www.example.com只能在客户端初始成功请求之后发生https://example.com.
这是因为HTTPS是基于TLS/SSL的HTTP(请参阅RFC 2818),它首先在发送任何HTTP流量之前建立SSL/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.
有两种解决方案:
example.com和www.example.com.这可以通过获取具有多个主题备用名称(SAN)DNS条目的证书来实现(*.example.com由于该点不是通配符模式的一部分,因此不会起作用).后者无疑是最简单的解决方案.对于CA来说,颁发具有SAN条目的证书example.com并且www.example.com当您申请其中一个时,这种情况很常见,有时无需额外费用.
| 归档时间: |
|
| 查看次数: |
4471 次 |
| 最近记录: |