3

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 だけでなく、より複雑な条件のセットを作成するにはどうすればよいですか?

4

1 に答える 1

7

秘訣は、一致させたいドメインを or|演算子を使用して 1 つのルールに結合し、1 つの「ポジティブ」ルールと 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$"ます。

于 2013-08-15T22:02:46.237 に答える