0

Ich habe diesen Code von here.MVC Permanente Möglichkeit, Weiterleitungen für HTTP zu HTTPS zu verwenden und für Entwicklungsumgebung auszuschalten

Beachten Sie, dass ich den Teil, der auf den ISSExpress 44300-Port umleitet, remedelt habe, weil ich II7.5 auf der Dev-Box ohne HTTPS verwenden möchte.

public class CustomRequireHttpsFilter : RequireHttpsAttribute 
     { 
     protected override void HandleNonHttpsRequest(AuthorizationContext filterContext) 
      { 
      // The base only redirects GET, but we added HEAD as well. This avoids exceptions for bots crawling using HEAD. 
      // The other requests will throw an exception to ensure the correct verbs are used. 
      // We fall back to the base method as the mvc exceptions are marked as internal. 

      if (!String.Equals(filterContext.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase) 
       && !String.Equals(filterContext.HttpContext.Request.HttpMethod, "HEAD", StringComparison.OrdinalIgnoreCase)) 
       { 
       base.HandleNonHttpsRequest(filterContext); 
       } 

      // Redirect to HTTPS version of page 
      // We updated this to redirect using 301 (permanent) instead of 302 (temporary). 
      string url = "https://" + filterContext.HttpContext.Request.Url.Host + filterContext.HttpContext.Request.RawUrl; 

      //if (string.Equals(filterContext.HttpContext.Request.Url.Host, "localhost", StringComparison.OrdinalIgnoreCase)) 
      // { 
      // // For localhost requests, default to IISExpress https default port (44300) 
      // url = "https://" + filterContext.HttpContext.Request.Url.Host + ":44300" + filterContext.HttpContext.Request.RawUrl; 
      // } 

      filterContext.Result = new RedirectResult(url, true); 
      } 
     } 

Dann, in meinem FilterDonfig.cs habe ich das hinzugefügt. Was es tut ist, dass es nur die obige Überschreibung verwendet, wenn Web.config "Debug = false" hat, was es in der Produktion hat. Ich muss Release nicht in meiner Entwicklungsumgebung ausführen, und ich möchte auch nicht, dass der lokale IIS SSL verarbeitet. Beachten Sie, dass ich das "RequireHttpsAttribute()" noch einmal auswertete und das neue oben verwendete verwendete.

public class FilterConfig 
{ 
    public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new HandleErrorAttribute()); 

     if (!HttpContext.Current.IsDebuggingEnabled) 
      { 
      /////filters.Add(new RequireHttpsAttribute()); 
      filters.Add(new CustomRequireHttpsFilter()); 
      } 
    } 
} 

Mache ich das Richtige? Wie kann man sicherstellen, dass SEO optimiert ist, weil Such-Bots nur eine Website verfolgen? Mein Verständnis ist, dass "http" und "https" 2 getrennte Websites von Suchmaschinen betrachtet werden. Mache ich das an der richtigen Stelle? Ich bin mir nicht sicher, welchen anderen Code ich bekomme.

===============

fragte ich meinen ISP darüber, wie permanente Umleitungen zu tun, und diese Lösung vorgeschlagen, und sie sagten:

Lieber Kunde, Wir Die Umleitung wurde nicht eingerichtet. Wir haben jedoch die HTTPS-Bindungseinstellung in IIS korrigiert, um das Problem zu beheben.

Ich frage mich, ob IIS das gleiche tun kann und das ist, was sie getan haben. Ich hoffe, dass ich im richtigen Forum bin :)

Antwort

1

Wie sei es damit auf einer IIS-Ebene zu tun mit dem URL rewrite module: http://forums.iis.net/t/1153050.aspx?URL+Rewrite+for+SSL+redirection

es in dev auszuschalten, nur die aktivierte Regel falsch in Ihrem dev Web-Set .config, aber aktivieren Sie es für alle Server/Umgebungen, für die HTTPS eingerichtet wurde.

Ich habe es in der Vergangenheit verwendet und es hat wirklich gut funktioniert. Speichert Ihre App mit Code, der nicht app-bezogen ist.

+0

Ja. Danke. Ich habe gerade auf meinem Hosting-Panel www.smarter.asp.com gesehen, dass ich das machen kann. Kann das auch für kanonische "www" und endende Schrägstriche funktionieren? – JustJohn

+0

Ja, es wird ein reguläres Ausdruckmuster erzeugt, das Sie an den Inhalt Ihrer Regex-Herzen anpassen können – LDJ

+0

Danke LDJ. Ich werde dieses Wochenende daran arbeiten. Ich denke, das ist eine gute Antwort und erklärt warum. – JustJohn

Verwandte Themen