質問が言うように、私のサイトにこのようなページのリクエストがある場合
http://somename.something.here/Dada.aspx
このようなものに
(a) ローカル接続をリダイレクトせず (VS での開発を容易にするため)、(b) string.Replace の代わりに UriBuilder を使用することを好みます。これはもう少し正確だからです。
if (!Request.IsLocal && !Request.IsSecureConnection) {
var ub = new UriBuilder(Request.Url);
ub.Scheme = Uri.UriSchemeHttps;
ub.Port = -1; // use default port for scheme
Response.Redirect(ub.Uri.AbsoluteUri, true);
return;
}
しばらく前に同じ問題に取り組んだことを覚えています。特定のページがhttpsを超え、残りのページがhttpを使用していることを確認したかったのです。また、訪問者が安全である必要のないページのために安全なページを離れると、httpに戻ることを確認したかったのです。これを達成するために、私は2つのオプションを検討しました。
最初のオプションは、無料の.NET URLRewriterプロジェクトを使用して、構成ファイルで概説されている特定のページを書き換えることができました。
# HTTP REQUIRED PAGES
RewriteCond %{HTTPS} =on
RewriteCond %{REQUEST_URI} !(/login\.aspx|/securepage\.aspx).*$ [NC]
RewriteCond %{HTTP_HOST} (.+)
RewriteRule ^(.*)$ http://%3$1 [R=301,L]
# HTTPS REQUIRED PAGES
RewriteCond %{HTTPS} =off
RewriteCond %{REQUEST_URI} (/login\.aspx|/securepage\.aspx).*$ [NC]
RewriteCond %{HTTP_HOST} (.+)
RewriteRule ^(.*)$ https://%3$1 [R=301,L]
この構成を使用すると、2つのページのみが安全であり、残りは安全ではないことを確認できます。このオプションで良い結果が得られました。
2番目のオプションは、この非常に問題を処理するための完全なソリューションを見つけた後に来ました。同社はSanibelLogicであり、 SSLRedirectという製品があります。このHTTPModuleベースのソリューションは、私が必要としていたことを正確に実行します。少しお金がかかりますが、実装と管理が簡単なものが必要な場合は、これで問題が解決する可能性があります。あなたがそれについて何かを編集したいなら、彼らはソースコードさえ提供します...
私は両方のオプションを何ヶ月も使用しましたが、その単純さのためにSSLRedirect製品を使用することになりました。
これがお役に立てば幸いです...
私はちょうど同じ問題を抱えていましたが、純粋に IIS 構成を使用して別の解決策を見つけました。
次の 2 つの方法があります。
(1) 簡単な方法は、たとえばMyWebAppの名前をMyWebAppSSLに変更することです。後者のSSLを有効にします。次に、古いMyWebAppのような名前の新しい空のフォルダーを IIS に作成します。MyWebApp の [プロパティ] をクリックし、[ディレクトリ] で [ URL へのリダイレクト] を選択してそこに配置します。「永続的なリダイレクト」を有効にすることをお勧めします。ちなみに、 MyWebAppは Web アプリケーションではなく、単にリダイレクトするだけなので、[ Web アプリケーションの作成]ボタンをクリックする必要はありません。http://MyServer/MyWebAppSSL
(2) 単純な方法にはもちろん、アプリケーションが新しい名前 (この例では-SSLで終わる) で実行されるという欠点があります。同じ古い名前で実行し続ける必要がある場合は、IIS を構成するだけでも可能ですが、少し異なる方法で進める必要があります。別のポートで実行されている IIS に新しい Web スペースをセットアップする必要があります。この適切な説明を見つけました: How to Auto-Redirect to a SSL-secured Site in IIS .
リダイレクト ヘッダー (302) をブラウザーに送信します。
例:
Response.Redirect("WebForm2.aspx")