【发布时间】:2013-08-14 22:19:16
【问题描述】:
在 IIS 7.5 中的 URL Rewrite 2.0 上下文中,我希望能够为多国站点的多个域强制执行规范域名,例如尽可能少的规则。像这样的:
<rule name="UK Host Name">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_HOST}" pattern="^company\.co\.uk$" />
<add input="{HTTP_HOST}" pattern="^company\.co$" />
<add input="{HTTP_HOST}" pattern="^company\.org$" />
<add input="{HTTP_HOST}" pattern="^company\.net$" />
<add input="{HTTP_HOST}" pattern="^company\.uk\.com$" />
<add input="{HTTP_HOST}" pattern="^www\.company\.co\.uk$" negate="true" />
</conditions>
<action type="Redirect" url="http://www.company.co.uk/{R:1}" />
</rule>
<rule name="France Host Name">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_HOST}" pattern="^company\.fr$" />
<add input="{HTTP_HOST}" pattern="^company-france\.com$" />
<add input="{HTTP_HOST}" pattern="^www\.company\.fr$" negate="true" />
</conditions>
<action type="Redirect" url="http://www.company.fr/{R:1}" />
</rule>
我相信,上面的问题是每个条件都必须为真,因此 logicalGrouping="MatchAll" 但如果更改为 MatchAny,那么最后一个条件(negate="true")将被忽略,这意味着我们运行重定向规则,即使用户访问的是正确的域。
我能想到的唯一替代方案是为每个不同的域设置单独的重写规则,但可能存在大量域并且可能会变得混乱。将会有很多其他的重写规则和映射。
如何创建更复杂的条件集,而不仅仅是 All 或 Any?
【问题讨论】:
标签: asp.net url-rewriting iis-7.5 domain-name