2017-06-19 40 views
0

私はこの問題について2,3日ほど調べており、かなりの研究を行っていますが、私はこれを理解できません。HTTPからHTTPSへのブラウザの問題

私は自分のページをhttpやhttpsにリダイレクトするように私のページを制御しようとしています。

私はその後、私はHttpModuleをリクエストに応じてすべてのページをチェックするために実行しているHTTPS

[AttributeUsage(AttributeTargets.Class)] 
public sealed class RequireSSL : Attribute { } 

で実行する必要があるすべてのページの上に置くためにattrubteを作成しました。

public class DartsGhentPipeline : IHttpModule 
    { 
     public void Init(HttpApplication context) 
     { 
      context.PreRequestHandlerExecute += Context_PreRequestHandlerExecute; 
     } 

     private void Context_PreRequestHandlerExecute(object sender, EventArgs e) 
     { 
      HttpApplication application = (HttpApplication)sender; 
      HttpRequest request = application.Request; 
      HttpResponse response = application.Response; 
      Page page = application.Context.CurrentHandler as Page; 

      if (page == null) 
       return; 

      bool requireSSL = page.GetType().GetCustomAttributes(typeof(RequireSSL), true).Length > 0; 
      bool isSecureConnection = request.IsSecureConnection; 
      string url = string.Format("{0}://www.dartsghent.be{1}", requireSSL ? Uri.UriSchemeHttps : Uri.UriSchemeHttp, HttpContext.Current.Request.RawUrl); 

      if (requireSSL != isSecureConnection) 
       response.RedirectPermanent(url); 
     } 

     public void Dispose() { } 
    } 

ここで問題は、同じURLにリダイレクトするときです。ブラウザはhttpからhttpsに切り替えることを拒否するか、またはその逆の方向にリダイレクトループが発生し、ブラウザがこれを回避します。

wwwと私のURLを入れ替えると、私のウェブサイトが完全に動作することがわかりました。またはwwwなし。しかし私は私がtest.dartsghent.beを持っているサブウェブサイトでこれを使うことはできません

誰も私がこれをいかに解決でき、urlrewriterモジュールplsなしでどうすればいいか教えてください。

任意のヘルプは

注意を高く評価している:私はMVC

を使用していないよ。ここクローム出力の例アンです。 enter image description here

ご覧のとおり、このページはそのままリダイレクトされています。 RedirectPermanent(URL)をhttpsに使用していますが、リダイレクトされてもhttpsに移動しないため、試行を続けます。

+0

「ブラウザが切り替えることを拒否する」とはどういう意味ですか?レスポンスに正しいリダイレクトヘッダーが設定されていますか(ブラウザの開発ツールを使用していますか?)予期しないブラウザの動作は何ですか? –

+0

Chromeで私は次のような動作をしました http:// dartsghent。be - > https://wwww.dartsghent.be =成功 http://dartsghent.be - > https://dartsghent.be =ページはhttpプロトコルに残ります –

+0

私がテストするほど、私はより多くの問題がリダイレクトにあると考えてください。私はリダイレクトにhttpsリンクに行くことを明確に伝えています。リダイレクトはドメインが同じである限り現在のものと同じプロトコールに自分自身をリダイレクトしているように見えます。それに関する解決策はありますか? –

答えて

0

私はより多くの研究を行い、問題が私のリダイレクト機能にあることを発見しました。 同じドメインにリダイレクトすると、プロトコルは変更されません。だから私がしたことはドメインwwwを確認することです。それが正面にあるかどうかを確認し、wwwを使ってドメインにリダイレクトします。それの前には誰もいません。

これは難しいので、最初に別のページにリダイレクトする必要があります。さもなければ、ブラウザはループで終わる。

私は少し劇的なようですが、私はそれを働かせる唯一の方法です。

1

この機能はすでにSystem.Web.Mvc.RequireHttpsAttributeクラスを経由してMVCのV4に存在する...これはASP.NET MVCであると仮定。

+0

ええ。私はMVCを使用していません。 –

+0

それから私たちにその情報を伝える必要があります。 –

+1

私の投稿で編集しました。私たちがそこに行かないと思ったMVCにタグをつけなかった –

0

url変数にwww.blah...をハードコードしています。

あなたは、サブドメインを使用する場合は、元の要求問い合わせる必要があります。

​​

これは私の頭の上からです。結果の文字列を調べ、それに応じて調整します。

+0

私はネット上の別のguidから私の例を得て、ただのlitleだけを適用しました。あなたの解決策は、httpとhttpsの間で切り替えるために私の問題を解決しません –

関連する問題