TLDR:我只需要这个条件: https://www.example.com - > https://example.com
我重写了强制HTTPS的规则。我还需要强制www到非www(或者弄清楚是否有办法改变绑定,以便https://www也有效)。我在IIS启动时使用服务器名称指示(SNI)动态安装并将多个域的多个SSL绑定到站点。因此,我不知道URL将是什么。我相信我已经弄清楚如何使用条件回调来捕获权限部分{example.com}并删除www。
但是,如果用户输入https://www.example.com,我就无法匹配。使用服务器上的IIS url重写模块中的模式匹配工具,https://www.example.com模式似乎匹配,但它实际上并未触发浏览器中的规则。关于浏览器中的https的一些东西正在抛弃它?或者是我的绑定?
<rewrite>
<rules>
<rule name="Rewrite http www to https">
<match url="(.*)" ignoreCase="true" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_HOST}" matchType="Pattern" pattern="www" />
<add input="{HTTP_HOST}" matchType="Pattern" pattern="^(www\.)(.*)$" />
</conditions>
<action type="Redirect" url="https://{C:2}/{R:1}" appendQueryString="true" redirectType="Found" />
</rule>
<!-- This rule is not working. It never seems to match. -->
<rule name="Rewrite https www to https">
<match url="(.*)" ignoreCase="true" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_HOST}" matchType="Pattern" pattern="www" />
<add input="{HTTP_HOST}" matchType="Pattern" pattern="^(https://)(www\.)(.*)$" />
</conditions>
<action type="Redirect" url="https://{C:3}/{R:1}" appendQueryString="true" redirectType="Found" />
</rule>
<rule name="Force HTTPS" enabled="true">
<match url="(.*)" ignoreCase="true" />
<conditions>
<add input="{HTTPS}" pattern="off" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Found" />
</rule>
</rules>
</rewrite>
所以,回顾一下,目前规则是这样做的:
http://example.com - &gt; https://example.com(好)
https://example.com - &gt; https://example.com(好)
http://www.example.com - &gt; https://example.com(好)
https://www.example.com - &gt; https://www.example.com !!! (应为https://example.com)
目前我的绑定:
类型 - 主机名 - 端口 - IP地址
http - 空白 - 80 - 10.0.0.53
https - example.com - 443 - *
https - example2.com - 443 - *
答案 0 :(得分:1)
我的回答是你不应该使用网址重写来获取https和www。
我将[RequireHttps]
放在应该使用https的控制器类上(或者如果你在该控制器中有应该响应普通http请求的方法的方法)。
这样做可以解决非www和www与http和https的问题。
然后,至于您只想使用www的附加评论,我通常只使用DNS提供商设置CNAME和A记录,但这是另一个问题。
答案 1 :(得分:1)
答案结果非常简单......我在帖子末尾的绑定必须改变。
类型 - 主机名 - 端口 - IP地址
http - blank - 80 - 10.0.0.53
https - example.com - 443 - *
https - example2.com - 443 - *
https - www.example.com - 443 - *
https - www.example2.com - 443 - *