web-dev-qa-db-ja.com

ローカルホスト上にある場合を除き、ルールをHTTPSに書き換えます

私はweb.configファイルに書き換えルールを追加するための基礎として、回答 ここで指定 を使用しています。 httpsを強制するために、localhostで実行されていないすべてのURLに一致させる必要があります。

これが私が今持っているものです:

<system.webServer>
  <rewrite> <!-- force https - https://stackoverflow.com/a/15119044/51 -->
    <rules>
      <rule name="Redirect HTTP to HTTPS" stopProcessing="true">
        <match url="^((?!localhost).)*$"/>
        <conditions>
          <add input="{HTTPS}" pattern="^OFF$"/>
        </conditions>
        <action type="Redirect" url="https://{HTTP_Host}/{R:1}" redirectType="SeeOther"/>
      </rule>
    </rules>
  </rewrite>
</system.webServer>

私は negative lookaround を使用して、URL内に「localhost」を含まないURLのみを照合しようとしています。しかし、これは機能していません。

では、localhost以外のURLのみを書き換えるには、このルールをどのように設定すればよいでしょうか。

35
Yaakov Ellis

この条件を試してください:

<system.webServer>
  <rewrite>
    <rules>
      <rule name="Redirect HTTP to HTTPS" stopProcessing="true">
        <match url="^(.*)$"/>
        <conditions>
          <add input="{HTTPS}" pattern="^OFF$"/>
          <add input="{HTTP_Host}" matchType="Pattern" pattern="^localhost$" negate="true" /> 
        </conditions>
        <action type="Redirect" url="https://{HTTP_Host}/{R:1}" redirectType="SeeOther"/>
      </rule>
    </rules>
  </rewrite>
</system.webServer>

negateパターンに対してlocalhost条件を使用するとうまくいくはずです。

52
anubhava

Anubhavaの answer に追加すると、localhostのadd要素を次の2つのエントリに置き換えて、localhostと127.0.0.1の両方に対応することができます。およびIIS

<add input="{HTTP_Host}" matchType="Pattern" pattern="^localhost(:\d+)?$" negate="true" />
<add input="{HTTP_Host}" matchType="Pattern" pattern="^127\.0\.0\.1(:\d+)?$" negate="true" />    

元の答えでは、localhost:123はhttpsにリダイレクトされるため、望ましくない場合があります。

46
Sam Sippe