Beste Möglichkeit, um alle HTTP zu HTTPS in IIS umzuleiten

25

Wir möchten, dass ALLE Websites auf unserem Webserver (IIS 10) SSL erzwingen (dh HTTP zu HTTPS umleiten).

Derzeit ist für jede Site SSL erforderlich, und es wird ein 403 errorHandler eingerichtet, der eine Verbindung 302 redirectzur https-Adresse für diese bestimmte Site herstellt.

Das funktioniert super. Aber es ist eine Qual für jeden einzelnen Standort, es gibt viel Raum für menschliches Versagen.

Ich würde im Idealfall eine permanente einrichten möchten 301 redirectauf alle HTTP://*zuHTTPS://*

Gibt es eine einfache Möglichkeit, dies in IIS zu tun?

userSteve
quelle
Können Sie nicht ein Skript schreiben, um diese Änderung für jede Site vorzunehmen, wodurch sowohl der Verwaltungsaufwand verringert als auch Tippfehler und Fehler vermieden werden?
Todd Wilcox
1
Der Titel ist falsch. Ich denke, es war beabsichtigt zu lesen "Bester Weg, um alle HTTP zu HTTPS in IIS umzuleiten"
Mick
@ToddWilcox kannst du ein Beispiel für ein solches Skript geben?
UserSteve
Verwenden Sie nicht IIS: D

Antworten:

39

Das IIS URL Rewrite-Modul 2.1 für IIS7 + ist möglicherweise Ihr Freund. Das Modul kann von IIS URL Rewrite heruntergeladen werden . Verwenden der Konfigurationsreferenz für URL Rewrite Module und URL Rewrite Module 2.0 erklären die Verwendung des Moduls.

Sobald das Modul installiert ist, können Sie mithilfe des IIS-Managers eine hostweite Umleitung erstellen. Wählen Sie URL-Umschreiben , Regel (n) hinzufügen ... und Leere Regel .

Name:
Weiterleitung zu HTTPS

Übereinstimmende URL
Angeforderte URL: Matches the Pattern
Verwenden: Wildcards
Muster: *
Groß- / Kleinschreibung ignorieren: Checked

Bedingungen
Logische Gruppierung: Match Any
Bedingungseingabe : {HTTPS}
Überprüfen Sie, ob die Eingabezeichenfolge: Matches the Pattern
Muster: OFF
Groß- / Kleinschreibung ignorieren: Aktiviert
Track Capture-Gruppen über Bedingungen hinweg: Nicht aktiviert

Servervariablen
freilassen.

Aktion
Aktionstyp: Redirect
Weiterleitungs-URL: https://{HTTP_HOST}{REQUEST_URI}
Anhängen der Abfragezeichenfolge: Nicht aktiviert
Weiterleitungstyp: Permanent (301)

Wenden Sie die Regel an und führen Sie IISReset aus (oder klicken Sie im IIS-Manager auf Neu starten).

Alternativ können Sie nach der Installation des Moduls die Datei applicationHost.config wie folgt ändern:

<system.webServer>
  <rewrite>
    <globalRules>
      <rule name="Redirect to HTTPS" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
        <match url="*" ignoreCase="true" negate="false" />
        <conditions logicalGrouping="MatchAny" trackAllCaptures="false">
          <add input="{HTTPS}" ignoreCase="true" matchType="Pattern" negate="false" pattern="OFF" />
        </conditions>
        <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" appendQueryString="false" redirectType="Permanent" />
      </rule>
    </globalRules>
  </rewrite>
</system.webServer>
sippybear
quelle
Funktioniert dies für permanente 301-Weiterleitungen?
UserSteve
@userSteve Wie in der obigen Antwort angegeben, können Sie den Umleitungstyp auswählen.
BE77Y
@userSteve whoops, ja, Sie sollten in der Lage sein, den Umleitungstyp auf 301 zu ändern und die gleichen Ergebnisse zu erhalten
sippybear
1
@sippybear noch eine frage - was bedeutet input = "{HTTPS}"? Sollte dies {HTTP} sein, da dies die Eingabe und HTTP die Ausgabe sein wird?
UserSteve
3
{HTTPS} ist eine Variable, die Sie abfragen, um herauszufinden, ob die Verbindung gesichert ist. Weitere Informationen hierzu finden Sie hier: docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/… In diesem Fall überprüfen wir, ob {HTTPS} deaktiviert ist, und leiten dann um, ob es ist
sippybear
1

Meine Forschung zeigt, dass dies ein besserer Weg zur Weiterleitung sein könnte:

<rewrite>
    <rules>
        <rule name="http to https" stopProcessing="true">
            <match url="(.*)" />
            <conditions>
                <add input="{HTTPS}" pattern="^OFF$" />
            </conditions>
            <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" />
        </rule>
    </rules>
</rewrite>
Gefallener Engel
quelle
1
Können Sie erklären, warum das besser ist?
UserSteve
Es tut mir leid, ich kann es mir nicht erklären, nur an wenigen Stellen lesen, dass die Syntax besser ist.
Fallen Angel
1
Hast du irgendwelche Quellen?
Dangel
1
Dies ist genau die gleiche Regel wie in serverfault.com/a/893804/7184 , wird jedoch mit regulären Ausdrücken und der Gruppierung "Alle Übereinstimmungen" geschrieben. Ein Vorteil könnte sein, dass der Regelausdruck Regelvorgaben verwendet und schärfer ist.
bzlm
Ich bin auf IIS 10 und die ausgewählte Antwort hat bei mir nicht funktioniert. Aus irgendeinem Grund hat IIS die Syntax nicht als gültige Regel erkannt. Ich habe Ihren Code eingefügt und es hat sofort funktioniert, danke für das Teilen.
Jordan