web-dev-qa-db-ja.com

IIS 1つのドメインのサブドメインに対してのみhttpからhttpsに書き直します

複数のサイトを実行しているIIS7Webサーバーがあります。一部のサイトは1つのドメインのサブドメインであり、他のサイトは完全に別個のドメインです。 IIS re-writeを使用して、1つのドメインのすべてのサブドメインサイトをhttpsにリダイレクトしたいが、他のドメインはそのままにしておきたい。たとえば、次のサイトがあります。同じWebサーバー:

one.test.com、two.test.com、otherdomain.com

そして、グローバルIIS書き換えてリダイレクトする http://one.test.com および http://two.test.com からhttpsへ。ただし、otherdomain.comは影響を受けません。

これが私がこれまでに持っているものであり、正規表現をテストしたとき、それは正しいように見えますが、サブドメインサイトをリダイレクトしていません:

<rewrite>
            <globalRules>
                <rule name="Redirect to HTTPS" enabled="true" stopProcessing="true">
                    <match url="(.*)(\.test\.com)" />
                    <conditions logicalGrouping="MatchAny">
                    </conditions>
                    <action type="Redirect" url="https://{R1}{R2}" redirectType="SeeOther" />
                </rule>
            </globalRules>
        </rewrite>

私はこれを複雑にしすぎているのか、それとも明らかなものがないのですか?

乾杯。

5
Charlotte

HTTP_Hostに一致する条件をルールに追加する必要があります(URL書き換えの「url」変数にはホスト名が含まれていません)。

<globalRules>
    <rule name="Redirect to HTTPS" enabled="true" stopProcessing="true">
        <match url="(.*)" />
        <conditions>
            <add input="{HTTP_Host}" pattern="(.+)\.test\.com" />
        </conditions>
        <action type="Redirect" url="https://{C:0}/{R:0}" />
    </rule>
</globalRules>

このルールは、*。test.com上のすべてのリクエストをHTTPSにリダイレクトする必要があります。

7
Nikola K.

この条件を追加する必要があります<add input="{HTTPS}" pattern="off" />上記のソリューションで。それ以外の場合は、ループで終了します。したがって、ルールは次のようになります。

<globalRules>
    <rule name="Redirect to HTTPS" enabled="true" stopProcessing="true">
        <match url="(.*)" />
        <conditions>
            <add input="{HTTPS}" pattern="off" />
            <add input="{HTTP_Host}" pattern="(.+)\.test\.com" />
        </conditions>
        <action type="Redirect" url="https://{C:0}/{R:0}" />
    </rule>
</globalRules>
2
Noufal