IIS重定向到HTTPS,不同规则的结果相同

时间:2017-09-11 11:57:54

标签: iis url-rewriting url-rewrite-module

在尝试将http流量重定向到https时,我发现了以下两条规则,它们似乎做了同样的事情,但它们在两个地方有很小的差异。我应该更喜欢那个吗?有什么好处吗? (表演,角落案件等)

规则1:

<rule name="HTTP to HTTPS Redirect" enabled="true" stopProcessing="true">
    <match url="(.*)" />
    <conditions logicalGrouping="MatchAny">
        <add input="{SERVER_PORT_SECURE}" pattern="^0$" />
    </conditions>
    <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" />
</rule>

规则2:

<rule name="HTTP to HTTPS Redirect" stopProcessing="true">
    <match url="(.*)" />
    <conditions>
        <add input="{HTTPS}" pattern="off" ignoreCase="true" />
    </conditions>
    <action type="Redirect" url="https://{HTTP_HOST}/{R:1}"
        redirectType="Permanent" />
</rule>

差异在输入和重定向的url中,其中一个使用{R:1}而另一个使用REQUEST_URI。

提前谢谢

1 个答案:

答案 0 :(得分:3)

两条规则都给出了相同的结果。并且它们之间的性能没有显着差异。除了IIS,默认情况下在内核级别缓存此类规则。这意味着很可能会从HTTP内核模式驱动程序响应请求,而无法访问Web应用程序。因此,这些规则的运行速度与无法衡量差异的速度一样快。

然而,如果您想进行不必要的优化(我有时会这样做:$)请检查以下规则。

<rule name="HTTP to HTTPS Redirect" patternSyntax="Wildcard" stopProcessing="true">
    <match url="*" />
    <conditions>
        <add input="{SERVER_PORT_SECURE}" pattern="0" ignoreCase="false" />
    </conditions>
    <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" />
</rule>

以下是使用此规则的不必要的预期改进;

  • 通配符匹配比Regex便宜。
  • 区分大小写 a.k.a。二进制比较(ignoreCase="false")更便宜。
  • 查看0 {SERVER_PORT_SECURE}比查看off的{​​{1}}便宜。