Angular und IIS. Weiterleitung zu HTTPS unter Beibehaltung der vollständigen URL

Angular und IIS. Weiterleitung zu HTTPS unter Beibehaltung der vollständigen URL

Ich muss für eine Angular-App, die auf einem IIS-Server gehostet werden muss, eine vollständige URL von HTTP auf HTTPS umleiten.

Ich habe die folgenden Regeln erstellt, aber sie funktionieren nicht, sie funktionieren nur mit der Hauptdomäne (wiehttp://www.somedomain.com, es leitet problemlos weiter, aber mithttp://www.somedomain.com/route

Hier sind meine Regeln. Was mache ich falsch?

<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>
    <rule name="Angular Routes" stopProcessing="true">
      <match url=".*" />
      <conditions logicalGrouping="MatchAll">
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
      </conditions>
      <action type="Rewrite" url="./index.html" />
    </rule>
</rules>

Die Idee ist, umzuleitenhttp://www.somedomain.com/route/somethingoderhttp://somedomain.com/route/somethingZuhttps://www.somedomain.com/route/something

Antwort1

Es gibt mehrere Möglichkeiten, dieselbe Umleitung durchzuführen. Wenn Sie url="https://{HTTP_HOST}/{R:1}" verwenden, müssen Sie appendQueryString="true" hinzufügen, sonst wird der URI-Pfad nicht angehängt.

Die Konfiguration sollte also so aussehen:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Redirect to HTTPS" enabled="true" stopProcessing="true">
                    <match url="(.*)" />
                    <conditions>
                        <add input="{HTTPS}" pattern="^OFF$" />
                    </conditions>
                    <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

Normalerweise verwende ich jedoch eine andere Regel mit 301-Weiterleitung, die unter bestimmten Bedingungen von Browsern besser gehandhabt wird. In diesem Fall müssen Sie einen anderen URI-Typ verwenden: url="https://{HTTP_HOST}{REQUEST_URI}"

<configuration>
 <system.webServer>
    <rewrite>
     <rules>
       <rule name="HTTPS force" enabled="true" stopProcessing="true">
       <match url="(.*)" />
       <conditions>
        <add input="{HTTPS}" pattern="^OFF$" />
       </conditions>
       <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" />
     </rule>
    </rules>
   </rewrite>
 </system.webServer>
</configuration>

Antwort2

Sie machen es richtig, aber IIS hat seinen verkabelten Cache, sodass Sie Änderungen manchmal nicht sofort sehen. Soweit ich mich erinnere, kann es iisreset irgendwie überleben. Außerdem merkt sich Google Chrome Weiterleitungen.

Der Vorschlag ist also, ein wenig zu warten oder beide Maschinen neu zu starten (klingt verrückt, ich weiß)

Hier ist meine funktionierende Konfiguration. Dieselbe Idee, aber andere Bedingungen.

     <rules>
        <rule name="http to https" stopProcessing="true">
          <match url="(.*)" />
          <conditions>
            <add input="{SERVER_PORT}" pattern="443" negate="true" />
            <add input="{HTTP_HOST}" pattern="\.local$" negate="true" />
            <add input="{URL}" pattern="/robots.txt" negate="true" />
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" />
        </rule>
      </rules>

verwandte Informationen