IISですべてのHTTPをHTTPSにリダイレクトする最良の方法


26

Webサーバー(IIS 10)上のすべてのサイトでSSLを強制する(HTTPをHTTPSにリダイレクトする)必要があります。

現在、各サイトで「SSLを要求」し、その特定のサイトのhttpsアドレスに対して403 errora 302 redirectを実行するハンドラーを設定しています。

これはうまく機能します。しかし、すべてのサイトに対して行うのは苦痛であり、人為的ミスの余地は十分にあります。

理想的には301 redirect、すべてHTTP://*にパーマネントを設定したいHTTPS://*

IISでこれを行う簡単な方法はありますか?


管理の負担を軽減し、タイプミスやミスを防ぐのに役立つ、すべてのサイトに対してこの変更を行うスクリプトを作成することはできませんか?
トッドウィルコックス

1
タイトルが間違っています。「IISですべてのHTTPをHTTPSにリダイレクトする最良の方法」
ミック、

@ToddWilcoxはそのようなスクリプトの例を与えることができますか?
userSteve

IISを使用しないでください:D

回答:


40

IIS7 +用のIIS URL書き換えモジュール2.1は、あなたの友人かもしれません。モジュールはIIS URL RewriteからダウンロードできますURL書き換えモジュールURL書き換えモジュール2.0構成リファレンスの使用では、モジュールの使用方法を説明しています。

モジュールをインストールしたら、IISマネージャーを使用してホスト全体のリダイレクトを作成できます。[ URL書き換え]、[ ルールの追加...]、および[ 空のルール]を選択します

名前:
HTTPSへのリダイレクト

一致したURL
要求URL: Matches the Pattern
使用: Wildcards
パターン: *
大文字と小文字を区別しない:チェックあり

条件
論理的なグループ化: Match Any
条件入力{HTTPS}
入力文字列のチェック: Matches the Pattern
パターン: OFF
大文字と小文字を区別しない:チェック済み
条件全体のキャプチャグループの追跡:チェックなし

サーバー変数は
空白のままにします。

アクション
アクションタイプ: Redirect
リダイレクトURL: https://{HTTP_HOST}{REQUEST_URI}
クエリ文字列の追加:チェックなし
リダイレクトタイプ: Permanent (301)

ルールを適用してIISResetを実行します(またはIISマネージャーで[再起動]をクリックします)

または、モジュールをインストールした後、applicationHost.configファイルを次のように変更できます。

<system.webServer>
  <rewrite>
    <globalRules>
      <rule name="Redirect to HTTPS" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
        <match url="*" ignoreCase="true" negate="false" />
        <conditions logicalGrouping="MatchAny" trackAllCaptures="false">
          <add input="{HTTPS}" ignoreCase="true" matchType="Pattern" negate="false" pattern="OFF" />
        </conditions>
        <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" appendQueryString="false" redirectType="Permanent" />
      </rule>
    </globalRules>
  </rewrite>
</system.webServer>

これは永続的な301リダイレクトで機能しますか?
userSteve

上記の答えに従って、@ userSteve、リダイレクトタイプを選択できます。
BE77Y

@userSteveおっと、ええ、あなたは変更することができるはずリダイレクトタイプを 301にして同じ結果を得る
sippybear

1
@sippybearもう1つの質問-input = "{HTTPS}"はどういう意味ですか?これは{HTTP}である必要があります。これが入力であり、HTTPが出力であるためです。
userSteve

3
{HTTPS}は、接続が保護されているかどうかを調べるためにクエリする変数です。詳細についてはこちらをご覧ください:docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/…この場合、{HTTPS}が「オフ」であるかどうかを確認し、次にifそれは
-sippybear

1

私の研究は、これがリダイレクトへのより良い方法かもしれないことを示しています:

<rewrite>
    <rules>
        <rule name="http to https" stopProcessing="true">
            <match url="(.*)" />
            <conditions>
                <add input="{HTTPS}" pattern="^OFF$" />
            </conditions>
            <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" />
        </rule>
    </rules>
</rewrite>

1
なぜこれが優れているのか説明できますか?
userSteve

ごめんなさい、私は自分自身を説明することができず、構文が優れているいくつかの場所で読むだけです。
堕天使

1
ソースはありますか?
天使

1
これは、と全く同じルールであるserverfault.com/a/893804/7184が、正規表現を使用して書かれており、マッチすべてをグループ化します。1つの利点は、ルール式がルールのデフォルトを使用し、より簡潔になることです。
bzlm

私はIIS 10を使用していますが、選択した答えはうまくいきませんでした。何らかの理由で、IISは構文を有効なルールとして認識しませんでした。あなたのコードを貼り付けたところ、すぐに動作しました。共有してくれてありがとう。
ヨルダン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.