2012-02-06 9 views
2

IIS7の「バインディング」機能を使用して、私のウェブサイトのルートにあるSSL証明書を「https」(ポート443)に追加しました。次に、特定のディレクトリ(/ secure-directory /)に対してSSL接続が必要でした。明示的にhttpsアドレス:https://www.mysite.com/secure-directory/にリンクして、このディレクトリにリダイレクトできるようになりました。問題は/ secure-directory /がSSLを使用する唯一のディレクトリであり、httpsプレフィックスを維持しているナビゲーションリンクが含まれているため、私の 'Home'リンクはhttp://www.mysite.comの代わりにhttps://www.mysite.comになります。HTTPSページのURLをHTTPに書き直す

リンクのhttpプレフィックスを/ secure-directory /に保存する理想的な方法は何ですか?私はIIS7のURL書き換えモジュールを持っているので、誰かがアウトバウンドルールを共有することができれば、それは非常に高く評価されます。それ以外の場合は、私がこれを完全に間違った方法にするのか、書き換えルールよりも良い解決方法があるのか​​を知りたいと思います。ありがとう。

答えて

0

おかげで呼び出すことができます。私はglobal.asaxとモジュールソリューションを実装することを検討しましたが、私のニーズに最も適したものはアウトバウンドの書き換えルールでした。 (パターンがないように、サーバー上で書き換え

<rule name="ForceHttpsToHttp" preCondition="ResponseIsHtml1"> 
    <match filterByTags="A, Img" pattern="^(?!.*javascript).*$" /> 
     <conditions> 
      <add input="{HTTPS}" pattern="ON" /> 
      <add input="{SERVER_PORT}" pattern="443" /> 
     </conditions> 
    <action type="Rewrite" value="http://{HTTP_HOST}:1860{R:0}" /> 
</rule> 

:私は、後日、再評価する私の状況でこれを再訪かもしれないが、今のところ、これは私が(1860ポートは生産のために削除して)使用しているものです(*。)は書き換えて中断します)

0

これはURLの書き換えに関する問題ではありません。しかし、少なくとも理論的には(POC時間ですか?)、非SSLに逆戻りする別の書き換えルールを書くことができます。ただし、リライトのシナリオはスケーラビリティではありませんが、人がフリップするたびに2回のヒットが強制されます。これは、アプリケーションの通常の使用状況に応じて、問題になる場合もあれば、問題でない場合もあります。

これを簡単に処理するには、メニューコントロールを無効にして、設定を尊重することができます。これは、メニューが他の実装で絶対的なリンクを使用していることを意味します(非SSLの場合はSSLの絶対値、逆の場合も同様です)。

「業界の強み」が必要な場合は、「パイプライン」にHTTPハンドラを追加し、そこでSSLまたは非SSLを制御することを検討してください。私はこれを徹底的に踏んで、あなたが(ここではシンドロームを作り出したわけではない)ホイールを再発明しなくてはならず、これを再利用可能な抽象化にしようとします。これはもう少し複雑ですが、別のソリューションに移行するときには、簡単に繰り返すことができます。私はまず、誰かがこのようなハンドラを提供しているかどうかを見てみましょう。これは、珍しい問題ではないためです。

これを見るには他にも方法があります。

2

私はthis moduleを使用しています。あなたは

<secureWebPages> 
    <directories> 
     <add path="secure-directory" /> 
    </directories> 
</secureWebPages> 
2

は、私は通常、このようなものを使用し、それは常に私のために働いています。https経由でのみアクセスであるとして/セキュアなディレクトリ/を設定することができます。 (これが最良の方法だとはっきりとは分かっていません)。

あなたはのglobal.asaxにこのような機能を持たせることができると応答のためのApplication_BeginRequest

private void RedirectToCorrectSSLScheme() 
    { 
     Uri pageRequest = Request.Url; 
     string requestPath = pageRequest.GetLeftPart(UriPartial.Path).ToLower(); 

     requestPath = Server.UrlDecode(requestPath); 
     // PageIsSecure returns if the given page should be secure or not. I 
     //maintain a list of secure pages or 
     //secure directory in an XML config. 
     bool securePage = GetSecurePages().PageIsSecure(requestPath); 
     if (pageRequest.Scheme == "https" && !securePage && requestPath.Contains(".aspx")) 
     { 
      Response.Redirect("http://" + pageRequest.Host + pageRequest.PathAndQuery, true); 
     } 
     else if (pageRequest.Scheme == "http" && securePage && requestPath.Contains(".aspx")) 
     { 
      Response.Redirect("https://" + pageRequest.Host + pageRequest.PathAndQuery, true); 
     } 
    } 
関連する問題