繁体   English   中英

IIS 7.5 Canonical URL重写多个域的规则

[英]IIS 7.5 Canonical URL Rewrite rules for multiple domains

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>

我相信上面的问题是每个条件都必须为true,因此logicalGrouping="MatchAll"但如果更改为MatchAny则会忽略最后一个条件(使用negate="true" ),这意味着我们运行重定向即使用户正在访问正确的域,也要遵守规则。

我能想到的唯一选择是为每个不同的域都有一个单独的重写规则,但可能存在大量的域,它可能会变得混乱。 将会有大量其他重写规则和地图。

如何创建更复杂的条件集,而不仅仅是All或Any?

关键是你要匹配域与或结合成一个规则| 运算符,以便您只有一个“正面”规则和一个“负面”规则,应该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$"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM