2008-09-05 12 views
137

Gibt es eine saubere Möglichkeit, alle Versuche umleiten zu einer HTTP: // - Version einer Website zu seinem HTTPS: // Äquivalent?IIS7: HTTP-> HTTPS sauber

+0

Antwort auf James Kovac Blog: http://jameskovacs.com/2007/05/09/how-to-autoredirect-to-a-sslsecured-site- in-iis/ – cpuguru

+0

Wenn Sie auf IIS 7 und auf R2 [hier] sind (http://www.jppinto.com/2010/03/automatisch-redirect-http-requests-to-https-on-iis7-using-) url-rewrite-2-0 /) ist ein Leitfaden, der funktioniert und der "sauberste" –

Antwort

173

Ich denke, der sauberste Weg ist wie beschrieben here on IIS-aid.com. Es ist nur web.config, und wenn Sie den Server wechseln, müssen Sie sich nicht an alle Schritte erinnern, die Sie mit der benutzerdefinierten Fehlerseite 403.4 oder anderen speziellen Berechtigungen durchgeführt haben, es funktioniert einfach.

<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="Found" url="https://{HTTP_HOST}/{R:1}" /> 
     </rule> 
     </rules> 
    </rewrite> 
    </system.webServer> 
</configuration> 
+4

Dies funktioniert perfekt, und für Bonuspunkte ist es völlig in sich abgeschlossen, so dass Sie keine neue Website erstellen müssen, wie in der angenommenen Antwort – WickyNilliams

+1

Wird dies für alle URLs unabhängig vom Dateityp ausgelöst. z.B. Eine direkte URL zu einer TXT-Datei? – Cheekysoft

+9

Dies funktionierte für mich mit der Ausnahme, dass ich die Umleitungs-URL zu https ändern musste: // {HTTP_HOST} {REQUEST_URI} –

-4

Ich denke mit "sauber" meinst du wie mit einem 300 Redirect. Konfiguration für viele Server & Sprachen here.

5

Ein sauberer Weg ändert nur das URL-Schema von http -> https und lässt alles andere gleichwertig. Es sollte serverseitig sein, so dass es keine Browserprobleme gibt.

JPPinto.com hat Step-By-Step instructions auf, wie dies gemacht wird, außer dass sie Javascript (HttpRedirect.htm) anstelle einer serverseitigen Umleitung verwenden. Aus irgendeinem Grund konnte ich IE nicht das Javascript laufen lassen, wenn Sie "freundliche HTTP-Fehlermeldungen anzeigen" aktiviert haben, das standardmäßig aktiviert ist. Eine andere Sache mit dem Skript ist, dass die Umleitung zum Pfad nicht funktioniert, auch nicht in FF oder Chrome. Das Skript leitet immer zu root um. (Vielleicht habe ich etwas verpasst, weil es zum Pfad umleiten sollte.)

Aus diesen Gründen habe ich eine ASP-Seite für die Weiterleitung verwendet. Der Nachteil ist natürlich, dass dies erfordert, dass klassisches ASP auf dem Server aktiviert wird.

OpsanBlog hat eine ASP script and instructions, die gut mit IIS6 funktionieren.

Ich hatte ein paar Probleme mit dieser Methode mit IIS7. Die Benutzeroberfläche hat Probleme, da IIS7 es sehr leicht macht, etwas zu verpassen.

  • Zuerst müssen Sie ASP als Webserver-Rollenfunktion installieren.
  • Zweitens, mit einem virtuellen Verzeichnis nicht funktioniert wie erwartet in IIS7 und ich tat nicht versuchen, dies zu debuggen. Stattdessen lege ich die Datei in den Stammordner der Site und verwende die URL '/SSLRedirect.asp' in der 403.4 Fehlerseite, um darauf zu verweisen.
  • Zuletzt, das schwierigste Teil, Sie müssen SSL nicht für SSLRedirect.asp erzwingen. Andernfalls erhalten Sie einen Fehler 403.4. Dazu wählen Sie die Datei in IIS7 'Content View' und wechseln zu 'Features View', so dass Sie die SSL-Einstellungen für die einzelne Datei bearbeiten und das Kontrollkästchen 'Require SSL' deaktivieren können.
  • IIS-Manager sollte den Dateinamen in der Kopfzeile anzeigen.

    +1

    Die verknüpften Anweisungen auf JPPinto.com wurden aktualisiert, um hervorzuheben, dass dies nicht auf IIS 7.5 oder R2 funktioniert. Sie sagen, dass Sie aufgrund von Sicherheitsänderungen in den neueren Versionen von IIS eine Sperrverletzung erhalten. Sie schlagen stattdessen die Methode URL Rewrite 2.0 vor (ähnlich wie bei der Antwort von @toxaq). – AussieRob

    9

    Die einfache und saubere Lösung, die ich war zu

    gefunden
    1. In SSL-Einstellungen -> SSL erforderlich

    2. In Error Pages -> On 403.4 Fehlern -> zum HTTPS umleiten Seite

    3. In Fehlerseiten -> Einstellungen bearbeiten ...-> Set Detailed Fehler für lokale Anfragen und benutzerdefinierte Fehlerseiten für Remote-Anfrage

    Der Vorteil ist, dass es keine zusätzlichen Zeilen Code benötigt. Nachteil ist, dass es Sie auf eine absolute URL umleitet.

    +0

    funktioniert perfekt (auf IIS 8.5/2012 R2). und kein Basteln mit der web.config – schmendrick

    +0

    dies ist eine kluge Möglichkeit, das Problem zu lösen. thx –

    +0

    Könnten Sie bitte ein Beispiel für diesen Nachteil geben? Unter welchen Umständen würde es passieren und warum ist es eine negative Sache? Wenn Sie es Ihrer Antwort hinzufügen könnten, wäre das großartig. Danke vielmals! –

    0

    Global.asax

    protected void Application_BeginRequest() 
    { 
    if (!Context.Request.Url.AbsoluteUri.Contains("localhost") && !Context.Request.IsSecureConnection) 
    Response.Redirect(Context.Request.Url.ToString().Replace("http:", "https:")); 
    } 
    
    +0

    Ich kann diese Umleitung leicht umgehen, indem ich "localhost" irgendwo in den URI setze, z. die Abfragezeichenfolge http://yourdomain.com?localhost=true Ich würde vorschlagen, stattdessen die Request.Url.Host Eigenschaft zu überprüfen –