IIS 仅针对一个域的子域从 http 重写为 https

IIS 仅针对一个域的子域从 http 重写为 https

我有一台 IIS7 Web 服务器,上面运行着多个网站。其中一些网站是同一个域的子域,而其他网站则是完全独立的域。我想使用 IIS 重写将一个域的所有子域网站重定向到 https,但我希望其他域保持原样。例如,我在同一个 Web 服务器上有以下网站:

one.test.com, two.test.com, otherdomain.com

我想设置一个全局 IIS 重写来重定向http://one.test.comhttp://two.test.com改为 https,但 otherdomain.com 不会受到影响。

这是我目前所拥有的,当我测试正则表达式时,它似乎是正确的,但它没有重定向子域名站点:

<rewrite>
            <globalRules>
                <rule name="Redirect to HTTPS" enabled="true" stopProcessing="true">
                    <match url="(.*)(\.test\.com)" />
                    <conditions logicalGrouping="MatchAny">
                    </conditions>
                    <action type="Redirect" url="https://{R1}{R2}" redirectType="SeeOther" />
                </rule>
            </globalRules>
        </rewrite>

我是否把这个问题搞得太复杂了或者忽略了一些显而易见的东西?

干杯。

答案1

您需要添加状况将 HTTP_HOST 与您的规则匹配(URL Rewrite 中的“url”变量不包含主机名)。

<globalRules>
    <rule name="Redirect to HTTPS" enabled="true" stopProcessing="true">
        <match url="(.*)" />
        <conditions>
            <add input="{HTTP_HOST}" pattern="(.+)\.test\.com" />
        </conditions>
        <action type="Redirect" url="https://{C:0}/{R:0}" />
    </rule>
</globalRules>

此规则应将 *.test.com 上的所有请求重定向到 HTTPS。

答案2

您必须<add input="{HTTPS}" pattern="off" />在上述解决方案中添加此条件。否则它将陷入循环。因此规则如下,

<globalRules>
    <rule name="Redirect to HTTPS" enabled="true" stopProcessing="true">
        <match url="(.*)" />
        <conditions>
            <add input="{HTTPS}" pattern="off" />
            <add input="{HTTP_HOST}" pattern="(.+)\.test\.com" />
        </conditions>
        <action type="Redirect" url="https://{C:0}/{R:0}" />
    </rule>
</globalRules>

相关内容