我有一台 IIS7 Web 服务器,上面运行着多个网站。其中一些网站是同一个域的子域,而其他网站则是完全独立的域。我想使用 IIS 重写将一个域的所有子域网站重定向到 https,但我希望其他域保持原样。例如,我在同一个 Web 服务器上有以下网站:
one.test.com, two.test.com, otherdomain.com
我想设置一个全局 IIS 重写来重定向http://one.test.com和http://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>