IIS-URL Schreiben Sie HTTP mit Port in HTTPS um

7

Meine Website hat zwei Bindungen: 1000 und 1443 (Port 80/443 wird von einer anderen Website auf derselben IIS-Instanz verwendet) . Port 1000 ist HTTP , Port 1443 ist HTTPS . Ich möchte alle eingehenden Anfragen mit "htt p: // server: 1000" an umleiten "https://server:1443". Ich spiele mit IIS 7 Rewrite Module 2.0 herum, aber ich stoße meinen Kopf gegen die Wand. Jeder Einblick wird geschätzt!

Übrigens funktioniert die unten stehende Umschreibekonfiguration hervorragend mit einer Site, die eine HTTP-Bindung an Port 80 und eine HTTPS-Bindung an Port 443 aufweist, jedoch nicht mit meinen Ports.

PS Meine URLs haben absichtlich Leerzeichen, weil der "Spam-Verhinderungsmechanismus" aktiviert wurde. Aus irgendeinem Grund funktioniert die Google-Anmeldung nicht mehr, sodass ich ein OpenID-Konto erstellen musste (kein Skript könnte der Schuldige sein). Ich bin mir nicht sicher, wie XML gut angezeigt werden soll, daher habe ich nach den öffnenden Klammern Leerzeichen eingefügt.

< ?xml version="1.0" encoding="utf-8"?>
< configuration>
  < system.webServer>
    < rewrite>
      < rules>
        < rule name="HTTP to HTTPS redirect" stopProcessing="true">
          < match url="(.*)" />
          < conditions trackAllCaptures="true">
                        < add input="{HTTPS}" pattern="off" />
          < /conditions>
          < action type="Redirect" redirectType="Found" url="htt ps: // {HTTP_HOST}/{R:1}" />
        < /rule>
      < /rules>
    < /rewrite>
  < /system.webServer>
< /configuration>
Andy Arismendi
quelle

Antworten:

9

Obwohl die Frage vor einiger Zeit beantwortet wurde, ist dies die Regel, die ich verwendet habe.

<rule name="Redirect to HTTP on different port" enabled="true" stopProcessing="true">
      <match url="(.*)"/>
      <conditions>
        <add input="{HTTPS}" pattern="ON"/>
      </conditions>
      <!-- Cannot Use {HTTP_HOST} as it contains both the {SERVER_NAME}{SERVER_PORT} -->
      <action type="Redirect" url="http://{SERVER_NAME}:1000{HTTP_URL}" redirectType="Found" appendQueryString="false"/>
    </rule>
Julien Jacobs
quelle
6
            <rule name="HTTP to HTTPS on different SSL Port" enabled="true" stopProcessing="true">
                <match url="(.*)" ignoreCase="true" />
                <conditions logicalGrouping="MatchAll" trackAllCaptures="true">
                    <add input="{HTTPS}" pattern="off" />
                    <add input="{HTTP_HOST}" pattern="([^/:]*?):[^/]*?" />
                </conditions>
                <action type="Redirect" url="https://{C:1}:1443/{R:0}" appendQueryString="false" />
            </rule>

Dies löste mein Problem.

Andy Arismendi
quelle
1
es sollte wahrscheinlich sein: ([^ /:] +) (: [^ /] *)? da Port möglicherweise nicht immer da ist.
Leblanc Meneses
1
Für zukünftige Googler: Diese Antwort stammt anscheinend aus diesem Thread im IIS-Forum. Dort finden Sie eine vollständige Beschreibung des regulären Ausdrucks.
Lasse Christiansen
1

Versuchen Sie dies zu ändern:

<action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}"/>

dazu:

<action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}:1443/{R:1}"/>
Dscoduc
quelle
Das scheint nicht zu funktionieren. Ich wünschte, das URL-Umschreibemodul hätte eine einfache Möglichkeit zu sehen, in was es die URL ändert.
Andy Arismendi
Das Matching- und Konditionsteil funktioniert. Wenn ich den Wert der Umleitungs-URL fest codiere, funktioniert dies, aber die Umleitungs-URL muss dynamisch sein. Wenn ein Benutzer http: // 10.0.0.100:1000 (Server-IP) eingibt, muss er zu https: // 10.0.0.100:1443 umleiten. Das Gleiche gilt, wenn sie http: // server.domain.com:1000 eingeben, muss es zu https: // server.domain.com:1443 umleiten.
Andy Arismendi
1
Es sieht also so aus, als ob ein Teil des Problems darin besteht, dass {HTTP_HOST} den Port enthält, z. B. wenn ich http: // server: 1000 eingebe, dann enthält {HTTP_HOST} 'server: 1000'. Dies scheint nicht richtig zu sein, zumal es eine separate Variable {SERVER_PORT} gibt.
Andy Arismendi
Ich habe es gerade auf meinem Server überprüft und es wird tatsächlich wie erwartet zu domain.com:1443 umgeleitet. Folgendes habe ich zur Weiterleitungs-URL hinzugefügt: https: // {HTTP_HOST}: 1443 / {R: 1}
Dscoduc