【问题标题】:IIS 7.5 Canonical URL Rewrite rules for multiple domains多个域的 IIS 7.5 规范 URL 重写规则
【发布时间】: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


    【解决方案1】:

    诀窍是将要匹配的域与或| 运算符组合成一个规则,这样你就只有一个“肯定”规则和一个“否定”规则,应该MatchAll。例如:

    <rule name="UK Host Name">
        <match url="(.*)" />
        <conditions logicalGrouping="MatchAll">
            <add input="{HTTP_HOST}" pattern="^company\.(co(\.uk)?|org|net|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(-france)?\.(fr|com)$" />
            <add input="{HTTP_HOST}" pattern="^www\.company\.fr$" negate="true" />
        </conditions>
        <action type="Redirect" url="http://www.company.fr/{R:1}" />
    </rule>
    

    这最终可能会让您的正则表达式匹配太多域名的可能性很小。例如。模式pattern="^company(-france)?\.(fr|com)$" 也匹配company.com,这可能是不可取的。在这种情况下,您必须更具体,例如将模式更改为pattern="^company\.fr|company-france\.com$"

    【讨论】:

    • 呃,我想踢自己(并删除我的问题)!
    猜你喜欢
    • 2020-01-05
    • 2011-09-02
    • 2011-08-07
    • 2013-08-09
    • 2014-10-27
    • 2012-08-05
    • 2014-05-01
    相关资源
    最近更新 更多