web-dev-qa-db-ja.com

IIS7でhttps://からhttp://にURLを書き換える

私はフォームからURLを書き換えようとしています:

https://example.com/about

フォームに

http://example.com/about

IIS7 URL rewriting :を使用して

<!-- http:// to https:// rule -->
<rule name="ForceHttpsBilling" stopProcessing="true">
  <match url="(.*)billing/(.*)" ignoreCase="true" />
  <conditions>
    <add input="{HTTPS}" pattern="off" ignoreCase="false" />
  </conditions>
  <action type="Redirect" redirectType="Found" url="https://{HTTP_Host}{REQUEST_URI}" />
</rule>

<!-- https:// to http:// rule -->    
<rule name="ForceNonHttps" stopProcessing="true">
  <match url="(.*)billing/(.*)" ignoreCase="true" negate="true" />
  <conditions>
      <add input="{SERVER_PORT}" pattern="^443$" />
  </conditions>
  <action type="Redirect" redirectType="Found" url="http://{HTTP_Host}{REQUEST_URI}" />
</rule>

私は迷っています。私は例のためにWebをブラウズし、考えられるすべての構文を試してきました。私が指定する書き換えルールは、単に機能していないように見えます 全然 すべてのhttps://リクエストは、書き換えエンジンには見えないフラットアウトです。

ルールは正常に機能します。以下の回答をご覧ください。

35
Jeff Atwood

ポート:443が別のWebサイトにバインドされていました!

上記の書き換えルールは、http://からhttps://への書き換えおよびその逆の場合に正常に機能しますが、それを行うためのより最適または簡単な方法があるかもしれません。

ウェブ上でhttps://からhttp://への書き換えシナリオの良い例があまり見られなかったので、将来の航海者が見つけるためにこの質問をここに残します。

26
Jeff Atwood

この投稿は少し古いですが、答えたいと思いました。私はASP.Net MVC3を使用していますが、上記のFabioの答えはうまくいきませんでした。 httpsへのhttpsリダイレクトを処理するために私が思いついた最も簡単な解決策は、有効なhttpsページが安全なコンテンツを要求できるようにする一方で、https/httpリダイレクトの上にホワイトリストルールを追加することでした。

    <rule name="WhiteList - content folder" stopProcessing="true">
      <match url="^content/"/>
      <conditions logicalGrouping="MatchAll" trackAllCaptures="false"/>
      <action type="None"/>
    </rule>
    <rule name="Redirect to HTTPS" stopProcessing="true">
      <match url="(.*)billing/(.*)" ignoreCase="true" />
      <conditions>
        <add input="{HTTPS}" pattern="^OFF$" />
      </conditions>
      <action type="Redirect" url="https://{HTTP_Host}/billing/" redirectType="SeeOther" />
    </rule>
    <rule name="ForceNonHttps" stopProcessing="true">
      <match url="(.*)billing/(.*)" ignoreCase="true" negate="true" />
      <conditions>
        <add input="{SERVER_PORT}" pattern="^443$" />
      </conditions>
      <action type="Redirect" redirectType="Found" url="http://{HTTP_Host}{REQUEST_URI}" />
    </rule>
5
Ben

まず、bindingを考慮してください。以下のリダイレクトモジュールを機能させるためのWebサイトへのhttpsは必須です(したがって、Webアプリを自己署名または有効な証明書)

httpshttpにリダイレクトするweb.configの最後の部分:

 <rewrite>
    <rules>
        <rule name="Force NonHTTPS" stopProcessing="true">
            <match url="(.*)" />
            <conditions>
               <add input="{HTTPS}" pattern="on" />
            </conditions>
            <action type="Redirect" url="http://{HTTP_Host}/{REQUEST_URI}" />
        </rule>
    </rules>
</rewrite>

同等のIIS GUIを書き換えモジュールで必要とする場合、以下の画像を参照してください。

enter image description here

ソース: tech-net の詳細とステップバイステップガイドをご覧ください。

3
Iman Abidi

あなたのソリューションは動作しますが、問題は次のとおりです:あなたのcss、js、imagesを含む、2番目の命令がリンクの最初の命令を殺すことは(.)billing /(.)ではありません。

このhttps to httpルールを使用できます。

<rule name="HTTPS to HTTP redirect" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{RequiresSSL:{R:1}}" pattern="(.+)" negate="true" />
<add input="{HTTPS}" pattern="on" ignoreCase="true" />
<add input="{REQUEST_URI}" pattern="^(.+)\.(?!aspx)" negate="true" />
</conditions>
<action type="Redirect" redirectType="Found" url="http://{HTTP_Host}/{R:1}" />
</rule>
2
Fabio