使用 IIS 7.5 URL 重写,如何将所有非来自特定子域的请求重定向到特定页面?

使用 IIS 7.5 URL 重写,如何将所有非来自特定子域的请求重定向到特定页面?

我想使用 IIS 7.5 中的 URL 重写模块来重定向所有请求不是从特定子域(x.domain.com)到特定文件夹/文件。

例如,这些应该按原样工作:

x.domain.com
x.domain.com/asdf

尽管有以下这些:

y.domain.com
y.domain.com/asdf
domain.com
domain.com/asdf

应重定向到这样的特定页面(确切的 URL,不依赖于使用的子域):

domain.com/a

不幸的是,我无法正确配置规则,因为虽然它匹配正确,但大多数情况下,当它匹配时只会导致重定向循环。(我知道我现在应该设置错误的规则,但它们甚至不会持续导致重定向循环。)

在 IIS 中设置另一个与 www.domain.com 和 domain.com 匹配的网站是简单的解决方案,但我更希望有一个可以处理所有事情并进行重定向的网站。

什么是正确的设置来获得这种行为(使用 UI 或直接将其添加到 Web.config)。

谢谢!

答案1

由于您尚未发布现有规则(导致重定向循环的规则),我无法告诉您为什么它不起作用。但我可以告诉您什么应该起作用:

<rule name="Rewrite all but one subdomain" stopProcessing="true">
  <match url="domain.com" />
  <conditions logicalGrouping="matchAll">
    <add input="{HTTP_HOST}" negate="true" pattern="^x.domain\.com$" />
    <add input="{HTTP_HOST}" negate="true" pattern="^domain\.com$" />
  </conditions>
  <action type="Redirect" url="http://domain.com/a/" appendQueryString="false" />
</rule>

<rule name="Rewrite domain requests" stopProcessing="true">
  <match url="domain.com" />
  <conditions logicalGrouping="matchAll">
    <add input="{HTTP_HOST}" pattern="^domain\.com$" />
    <add input="{PATH_INFO}" pattern="^/a/$" negate="true" />
  </conditions>
  <action type="Redirect" url="http://domain.com/a/" appendQueryString="false" />
</rule>

这里我们必须有规则,一个是重写所有 URL 匹配的请求,domain.com除了主机头完全匹配之外x.domain.comdomain.com以避免循环)。

第二条规则匹配对domain.com以下地址的请求/a/

答案2

Mathias 的回答满足了我的需求。我必须遵循的确切规则如下,仅涉及两处更改:

匹配 URL 实际上是基于路径的,所以我必须将其更改为匹配任何内容(或不匹配任何内容),这很好,因为 IIS 在网站上正确设置了绑定并且条件将正确捕获它。

logicalGrouping 的枚举需要是 MatchAll。

<rule name="Rewrite all but one subdomain" enabled="true" stopProcessing="true">
    <match url=".?" />
    <conditions logicalGrouping="MatchAll">
        <add input="{HTTP_HOST}" pattern="^x.domain\.com$" negate="true" />
        <add input="{HTTP_HOST}" pattern="^domain\.com$" negate="true" />
    </conditions>
    <action type="Redirect" url="http://domain.com/a/" appendQueryString="false" />
</rule>
<rule name="Rewrite domain requests" stopProcessing="true">
    <match url=".?" />
    <conditions logicalGrouping="MatchAll">
        <add input="{HTTP_HOST}" pattern="^domain\.com$" />
        <add input="{PATH_INFO}" pattern="^/a/$" negate="true" />
    </conditions>
    <action type="Redirect" url="http://domain.com/a/" appendQueryString="false" />
</rule>

相关内容