IIS7:HTTP-> HTTPSクリーン


146

サイトのHTTP://バージョンにアクセスするすべての試みを、対応するHTTPS://にリダイレクトするクリーンな方法はありますか?


:答えはジェームズKovacののブログで見ることができjameskovacs.com/2007/05/09/...
cpuguru

あなたはIIS 7上及びR2上にある場合は、ここで動作し、ほとんどの「クリーン」ガイドです
Ujwalパーカー

回答:


177

最もクリーンな方法は、ここIIS-aid.comで説明されているとおりだと思います。これはweb.configのみであるため、サーバーを変更する場合、403.4カスタムエラーページまたはその他の特別な権限で実行したすべての手順を覚えておく必要はありません。

<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="HTTP to HTTPS redirect" stopProcessing="true">
          <match url="(.*)" />
            <conditions>
              <add input="{HTTPS}" pattern="off" ignoreCase="true" />
            </conditions>
            <action type="Redirect" redirectType="Permanent" url="https://{HTTP_HOST}/{R:1}" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

9
リダイレクトURLをhttps:// {HTTP_HOST} {REQUEST_URI}に変更する必要があることを除いて、これは私にとってはうまくいきました
Andrew S

6
これも私にとってはうまくいきました。実行しているアプリケーションを追加する必要がありました... localhost / app1 => http:// {HTTP_HOST} / app1 / {R:1}
RealSollyM

15
まだ書き換えセクションがない場合は、web.configの次のセクションにルールを配置します。<system.webServer> <rewrite> <rules> ... </ rules> </ rewrite> </ system .webServer>
raider33 2014

16
Microsoft URL Rewrite ModuleがIISサーバーにインストールされていることを確認します
Iman

7
SEOの理由から、redirectType = "Permanent"を使用する必要があります。support.google.com/webmasters/answer/…を
Niels Bosma 2015

14

私が見つけた最も簡単でクリーンな解決策は

  1. SSL設定-> SSLが必要

  2. エラーページ-> 403.4エラー時-> HTTPSサイトにリダイレクト

  3. エラーページ->機能設定の編集...->ローカルリクエストの詳細エラーとリモートリクエストのカスタムエラーページの設定

利点は、追加のコード行を必要としないことです。欠点は、絶対URLにリダイレクトされることです。


1
完全に動作します(IIS 8.5 / 2012 R2上)。web.configをいじくり
回さ

この欠点の例を挙げていただけますか?それはどのような状況で起こり、なぜそれが否定的なことなのでしょうか?あなたの答えにそれを追加できればそれは素晴らしいでしょう。どうもありがとう!
Marcos Dimitrio

2
@MarcosDimitrioかなり前のことなので、私にはわかりません。しかし、絶対URLにリダイレクトするつもりだったときは、「ベースURL」を意味したと思います。たとえば、「http」://mywebsite.com/hellokittyは「https」://mywebsite.comにリダイレクトされるため、一部のパス情報が失われ、既存のすべてのリンクが余分なパス情報で破壊されます。
ColacX 2017年

5

クリーンな方法は、URLスキームのみをhttp-> httpsに変更し、その他はすべて同等のままにします。ブラウザの問題がないように、サーバー側にする必要があります。

JPPinto.com には、サーバー側のリダイレクトの代わりにjavascript(HttpRedirect.htm)を使用することを除いて、これがどのように行われるかについてのステップバイステップの説明があります。何らかの理由で、「フレンドリーなHTTPエラーメッセージを表示する」がデフォルトで有効になっていると、IEでJavaScriptを実行できませんでした。スクリプトのもう1つのことは、パスへのリダイレクトがFFまたはChromeでも機能しなかったことです。スクリプトは常にルートにリダイレクトします。(パスにリダイレクトする必要があるため、何かを見逃している可能性があります。)

これらの理由により、私はリダイレクトにASPページを使用しました。もちろん、欠点は、サーバーでクラシックASPを有効にする必要があることです。

OpsanBlogには、IIS6で適切に機能するASPスクリプトと指示があります。

IIS7でこの方法を使用すると、いくつかの問題が発生しました。IIS7は何かを見落とすことを本当に簡単にしているので、ユーザーインターフェイスの問題はほとんどです。

  • まず、ASPをWebサーバーの役割機能としてインストールする必要があります。
  • 次に、仮想ディレクトリの使用はIIS7で期待どおりに機能せず、これをデバッグしようとしませんでした。代わりに、ファイルをサイトのルートフォルダーに配置し、403.4エラーページでURL '/SSLRedirect.asp'を使用して参照しました。
  • 最後に、最もトリッキーな部分は、SSLRedirect.aspにSSLを適用しはならないことです。そうしないと、403.4エラーが発生します。これを行うには、IIS7の[コンテンツビュー]でファイルを選択し、[機能ビュー]に切り替えて、単一ファイルのSSL設定を編集し、[SSLが必要]チェックボックスをオフにします。

IISマネージャーは、ヘッダーにファイル名を表示する必要があります。


1
JPPinto.comのリンクされた手順が更新され、IIS 7.5またはR2では機能しないことが強調されています。IISの新しいバージョンでのセキュリティの変更により、ロック違反が発生するとのことです。代わりに、URL書き換え2.0メソッドを使用することをお勧めします(@toxaqからの回答と同様のアプローチ)。
Robert Shattock 2016

0

Global.asax

protected void Application_BeginRequest()
{
if (!Context.Request.Url.AbsoluteUri.Contains("localhost") && !Context.Request.IsSecureConnection)
Response.Redirect(Context.Request.Url.ToString().Replace("http:", "https:"));
}

1
「localhost」をURIのどこかに置くことで、このリダイレクトを簡単に回避できます。たとえば、クエリ文字列yourdomain.com?localhost=true 代わりにRequest.Url.Hostプロパティを確認することをお勧めします
Aidy J

0

私はクラシックasp(イントラネット)を使用しており、ログインが必要なページでは、ログオンインクルードファイルがリダイレクトを実行します。

if Request.ServerVariables("SERVER_PORT_SECURE") <> "1" or Request.ServerVariables("HTTPS") <> "on" then 
    Response.Redirect "https://" & Request.ServerVariables("SERVER_NAME") & Request.ServerVariables("URL")
end if

もちろん、これにはGETまたはPOSTデータは含まれません。したがって、実際には、保護されたページへのクリーンなリダイレクトになります。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.