質問
サイトの HTTP:// バージョンにアクセスしようとするすべての試行を、同等の HTTPS:// にリダイレクトするきれいな方法はありますか?
解決
最もきれいな方法は説明どおりだと思います 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>
他のヒント
私が見つけた最も簡単でクリーンな解決策は、
SSL設定 -> SSLが必要
エラー ページ内 -> 403.4 エラー時 -> HTTPS サイトにリダイレクト
エラーページ -> 機能設定の編集...-> ローカルリクエストの詳細エラーとリモートリクエストのカスタムエラーページを設定します
利点は、追加のコード行が必要ないことです。欠点は、絶対 URL にリダイレクトされることです。
クリーンな方法は、URL スキームのみを http -> https に変更し、その他はすべて同等のままにします。ブラウザーの問題が発生しないように、サーバー側で行う必要があります。
JPPinto.com は ステップバイステップの説明 これがどのように行われるかについては、サーバー側のリダイレクトの代わりに JavaScript (HttpRedirect.htm) を使用する点が異なります。何らかの理由で、デフォルトでオンになっている「わかりやすい HTTP エラー メッセージを表示する」が有効になっている場合、IE で JavaScript を実行できませんでした。このスクリプトに関するもう 1 つの問題は、パスへのリダイレクトが FF や Chrome でも機能しなかったことです。スクリプトは常に root にリダイレクトされます。(パスにリダイレクトされるはずなので、何かを見逃している可能性があります。)
これらの理由から、私はリダイレクトに ASP ページを使用しました。もちろん、欠点は、サーバー上でクラシック ASP を有効にする必要があることです。
OpsanBlog には、 ASP スクリプトと手順 IIS6 でうまく動作します。
IIS7 でこの方法を使用すると、いくつかの問題が発生しました。ユーザー インターフェイスの問題のほとんどは、IIS7 では何かを見落としやすいためです。
- まず、ASPをWebサーバーロール機能としてインストールする必要があります。
- 第二に、仮想ディレクトリを使用すると、IIS7では予想どおりに機能しなかったため、これをデバッグしようとはしませんでした。代わりに、ファイルをサイトのルートフォルダーに配置し、403.4エラーページにurl '/sslredirect.asp'を使用して参照しました。
- 最後に、最も注意が必要な部分は、あなたです。 SSLRedirect.asp に SSL を強制してはなりません. 。そうしないと、403.4 エラーが発生します。これを行うには、IIS7 の [コンテンツ ビュー] でファイルを選択し、[機能ビュー] に切り替えて、単一ファイルの SSL 設定を編集し、[SSL が必要] チェックボックスを無効にします。
IIS マネージャーはヘッダーにファイル名を表示する必要があります。
グローバル.asax
protected void Application_BeginRequest()
{
if (!Context.Request.Url.AbsoluteUri.Contains("localhost") && !Context.Request.IsSecureConnection)
Response.Redirect(Context.Request.Url.ToString().Replace("http:", "https:"));
}
私はクラシック 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 データは含まれません。したがって、実質的には、安全なページへのクリーンなリダイレクトになります。
「きれいに」というのは、300 リダイレクトのような意味だと思います。多くのサーバーと言語の設定 ここ.