我有这段代码,效果很好
<rule name="Force non-WWW" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAny">
<add input="{HTTP_HOST}" pattern="^(www\.)(.*)$" />
</conditions>
<action type="Redirect" url="https://{C:2}/{R:1}" appendQueryString="true" />
</rule>
<rule name="Force HTTPS" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAny">
<add input="{HTTPS}" pattern="off" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" />
</rule>
我为一个域https://example.com
购买了SSL证书
如果用户使用 https://www.exmple.com
他收到此错误您的连接不安全
该网站无法重定向到https://example.com
并保持此错误状态。
但对于www.example.com
或example.com
之类的其他系统类型,代码可以正常运行
如何在出现此错误之前重定向
也许我需要这段代码,但是在web.config中,我不知道如何在web.config中编写
# BEGIN SSL
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteCond %{HTTP_HOST} ^(www\.)?replace-with-your-URL\.com$ [NC]
RewriteRule ^$ https://replace-with-your-URL.com$1 [R,L]
# END SSL
答案 0 :(得分:0)
由于规则顺序,这些规则可与example.com
和www.example.com
配合使用-删除www
然后重定向到https://
,以便将其重定向到https://example.com
< / p>
要验证是否交换了规则顺序,请转到www.example.com
,您将收到Your conection is not secure
消息。
该规则将始终适用于未加密的HTTP。
仅使用SAN的example.com会在使用https://www.example.com
时导致此问题,因为第一个规则永远不会执行,因为浏览器不允许更改,因为证书与服务器名称不匹配。
如果您可以获得多名证书,则添加www.example.com
或什至最好获得通配符*.example.com
-然后所有内容都将执行带状www规则。
除非服务器名称与证书匹配,否则您已经没有规则可以对URL进行加密了。
答案 1 :(得分:0)
SSL / TLS握手发生在URL重写之前,不幸的是,许多人都忽略了它。
您必须为Web浏览器提供www.site.com和site.com的有效证书。否则,Web浏览器在未检测到有效证书时将生成警告。
根据您的预算,应该使用具有多个主机名的SAN证书或具有正确SNI映射的两个证书。有了Let's Encrypt提供的免费证书(无论是否有SAN),都几乎不需要购买证书(除非您经营有更高要求的企业)。