在 Windows Server 2012 R2 中使用 IIS。
我有一个网站,可以通过url.com
和访问www.url.com
。我已https://url.com
使用https://letsencrypt.org/。
我想将所有传入的请求重定向到https://url.com/{path}
也就是说,它需要处理
- http://url.com->https://url.com
- http://url.com/some/thing->https://url.com/some/thing
- https://www.url.com/something->https://url.com/something
我将此重写规则添加到了 webconfig。
<rewrite>
<rules>
<rule name="HTTP to HTTPS redirect" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" />
</rule>
</rules>
</rewrite>
这对任何 URL 都有效,例如,http://url.com/some
但如果我输入,https://www.url.com/s
我会收到一条错误消息,指出连接不安全。如果我尝试http://www.url.com
我怎样才能让它工作?
答案1
您无法避免请求到达 www.example.com 而不出现错误,因为重定向发生在 SSL 协商“之后”,并且客户端正在请求您没有证书的名称。
Letsencrypt 完全允许您使用多个名称的同一份证书。因此您必须这样做以避免客户端浏览器投诉或证书中的名称不匹配。
答案2
检查您正在使用的 SSL 证书中的主题名称和主题备用名称。
似乎它仅对 url.com 有效,而不对 www.url.com 有效
您需要在申请证书时提及这一点