2008-09-05 6 views
137

はHTTPに行くにすべての試みをリダイレクトするクリーンな方法があります:そのHTTPSへのサイトのバージョン//://同等?IIS7:HTTP-> HTTPSきれいに

+0

回答ジェームズKovacののブログで見ることができます:http://jameskovacs.com/2007/05/09/how-to-autoredirect-to-a-sslsecured-site- in-iis/ – cpuguru

+0

IIS 7およびR2 [ここ](http://www.jppinto.com/2010/03/automatically-redirect-http-requests-to-https-on-iis7-using- url-rewrite-2-0 /)は動作し、最もクリーンなガイドです –

答えて

173

最もクリーンな方法は、here on 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="Found" url="https://{HTTP_HOST}/{R:1}" /> 
     </rule> 
     </rules> 
    </rewrite> 
    </system.webServer> 
</configuration> 
+4

これは完全に機能し、ボーナスポイントのために完全に自己完結しているので、受け入れられた回答 – WickyNilliams

+1

に記載されているように新しいウェブサイトを作成する必要はありません。例えばtxtファイルへの直接URL? – Cheekysoft

+9

これはリダイレクトURLをhttps:// {HTTP_HOST} {REQUEST_URI} –

-4

私は「きれい」であなたは300リダイレクトと同じように意味だと思います。多くのサーバーの構成&言語here

5

のhttpからのみURLスキームきれいな方法の変更 - > HTTPSおよび他のすべて同等のものを残します。ブラウザーの問題がないように、サーバー側にする必要があります。

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

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

OpsanBlogには、IIS6でうまく動作するASP script and instructionsがあります。

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

  • 最初に、 Webサーバーの役割機能としてASPをインストールする必要があります。
  • 第2に、IIS7で仮想ディレクトリを使用して が予期したとおりに動作しなかったため、これをデバッグしようとしましたが、 その代わり、私は、サイトのルートフォルダにファイルを入れて、それを参照する 403.4エラーページに URL「/SSLRedirect.asp」を使用しました。
  • 最後に、最も厄介な部分は、は、SSLRedirect.aspのSSLを強制してはいけません。そうでなければ、403.4エラーが発生します。これを行うには、IIS7の[コンテンツビュー]でファイルを選択し、[機能ビュー]に切り替えて、単一ファイルのSSL設定を編集し、[SSLを要求する]チェックボックスを無効にします。

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

+1

JPPinto.comのリンクされた説明は、IIS 7.5またはR2では動作しないことを強調するために更新されました。彼らは、新しいバージョンのIISでセキュリティの変更が原因でロック違反が発生すると言います。代わりにURL Rewrite 2.0メソッドを使用することをお勧めします(@toxaqの回答と同様のアプローチ)。 – AussieRob

9

私が見つけた最も簡単かつクリーンなソリューションは、SSLの設定で

  1. にした - >エラーページでSSL

  2. を要求 - > 403.4エラーの場合 - > HTTPSへのリダイレクトエラーページでサイト

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

メリットは余分なコード行を必要としないことです。 欠点は、あなたを絶対URLにリダイレクトすることです。

+0

は完全に(IIS 8.5/2012 R2上で)動作します。 web.config – schmendrick

+0

これは問題を解決するための賢い方法です。 thx –

+0

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

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:")); 
} 
+0

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

関連する問題