it-swarm.com.de

web.config Weiterleitung von nicht-WWW zu WWW

Ich muss nicht-WWW-URLs für beide HTTP- und https-URLs an die WWW-URL umleiten. Ich habe versucht, Regeln in web.config zu befolgen.

<rule name="Redirect to WWW" stopProcessing="true">
<match url=".*" />
<conditions>
    <add input="{HTTP_Host}" pattern="^domain.com$" />
</conditions>
<action type="Redirect" url="http://www.domain.com/{R:0}" redirectType="Permanent" />

<rule name="Redirect to WWW https" stopProcessing="true">
<match url=".*" />
<conditions>
    <add input="{HTTPS}" pattern="^domain.com$" />
</conditions>
<action type="Redirect" url="https://www.domain.com/{R:0}" redirectType="Permanent" />

Es funktioniert perfekt für Nicht-SSL-URL, aber im Falle von SSL leitet es von https://domain.com an http://www.domain.com

Bitte hilf mir, meine Regeln zu korrigieren.

32
Anand

Für eine sicherere Regel, die sowohl in Match Any- als auch in Match All-Situationen funktioniert, können Sie die Rewrite Map-Lösung verwenden. Dies ist eine absolut gute Lösung mit dem einzigen Nachteil, dass die Einrichtung nur einen geringen zusätzlichen Aufwand erfordert, da Sie vor dem Erstellen der Regel eine Karte zum erneuten Schreiben erstellen müssen. Mit anderen Worten: Wenn Sie sich für diese Protokollmethode entscheiden, sind Sie sicher.

Sie können eine Rewrite Map mit dem Namen MapProtocol erstellen. Sie können {MapProtocol:{HTTPS}} für das Protokoll innerhalb einer beliebigen Regelaktion verwenden. 

<rewrite>
  <rules>
    <rule name="Redirect to www" stopProcessing="true">
      <match url="(.*)" />
      <conditions trackAllCaptures="false">
        <add input="{HTTP_Host}" pattern="^domain.com$" />
      </conditions>
      <action type="Redirect" 
        url="{MapProtocol:{HTTPS}}://www.domain.com/{R:1}" />
    </rule>
  </rules>
  <rewriteMaps>
    <rewriteMap name="MapProtocol">
      <add key="on" value="https" />
      <add key="off" value="http" />
    </rewriteMap>
  </rewriteMaps>
</rewrite>

Referenz

48
Satpal

Andere Antworten hier sind unnötig lang, hier ist die Regel, die ich verwende (einfach kopieren und einfügen):

<rule name="ensurewww" stopProcessing="true">
  <match url=".*" />
  <conditions>
    <add input="{CACHE_URL}" pattern="^(.+)://(?!www)(.*)" />
  </conditions>
  <action type="Redirect" url="{C:1}://www.{C:2}" redirectType="Permanent" />
</rule>

Dadurch wird auf die WWW-Version umgeleitet, während das HTTP- und HTTPS-Protokoll beibehalten wird

Hoffe das hilft.

5
Chtiwi Malek

Seit 2018 sollten Sie jedes Mal https (SSL) verwenden!

Also nutze ich die Weiterleitung zu www und zu https zusammen.

<rule name="Redirect to www" stopProcessing="true">
    <match url="(.*)" />
    <conditions trackAllCaptures="false">
        <add input="{HTTP_Host}" pattern="^domain.com$" />
    </conditions>
    <action type="Redirect" url="https://www.comain.com/{R:1}" redirectType="Permanent" />
</rule>

<rule name="HTTP/S to HTTPS Redirect" enabled="true" stopProcessing="true">
    <match url="(.*)" />
    <conditions logicalGrouping="MatchAny">
        <add input="{SERVER_PORT_SECURE}" pattern="^0$" />
    </conditions>
    <action type="Redirect" url="https://{HTTP_Host}{REQUEST_URI}" redirectType="Permanent" />
</rule>

weitere Informationen hier: https://forums.realmacsoftware.com/t/effective-july-2018-google-s-chrome-browser-will-mark-non-https-sites-as-not-secure/18597

5
Meloman

Ich weiß, dass dies ein alter Beitrag ist, der jedoch nicht vollständig beantwortet wird. Ich endete mit der Erweiterung Satpals Antwort

Die erste Regel fängt http + www und die zweite Regel Nicht-www

Aus irgendeinem Grund konnte ich MapProtocol nicht in der Faustregel verwenden, aber es funktioniert mit direkt in die URL geschriebenem https.

<rewrite>
  <rules>
    <rule name="Special case www &amp; HTTPS off" enabled="true" stopProcessing="true">
      <match url="(.*)" />
      <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{HTTP_Host}" pattern="^www\.example\.com$" />
        <add input="{HTTPS}" pattern="off" />
      </conditions>
      <action type="Redirect" url="https://www.example.com/{R:1}" redirectType="SeeOther" />
    </rule>
    <rule name="Redirect to www &amp; HTTPS" enabled="true" stopProcessing="true">
      <match url="(.*)" />
      <conditions trackAllCaptures="false">
        <add input="{HTTP_Host}" pattern="^example\.com$" />
      </conditions>
      <action type="Redirect" url="{MapProtocol:{HTTPS}}://www.example.com/{R:1}" redirectType="SeeOther" />
    </rule>
  </rules>
  <rewriteMaps>
    <rewriteMap name="MapProtocol">
      <add key="on" value="https" />
      <add key="off" value="http" />
    </rewriteMap>
  </rewriteMaps>
</rewrite>
1
southz rgw

Das hat gut funktioniert: -

<rewrite>
  <rules>
   <rule name="Redirect to WWW" stopProcessing="true">
        <match url=".*" />
        <conditions>
        <add input="{HTTP_Host}" pattern="^myExample.in$" />
        </conditions>
        <action type="Redirect" url="https://www.myExample.in/{R:0}" redirectType="Permanent" />
</rule>
 </rules>
</rewrite>
0
Anjan Kant