aekakias
Goto Top

Web.Config Weiterleitung nicht www zu www und http zu https

Hallo zusammen,

ich habe in Azure eine Webapp und möchte gerne den ganzen http-traffic auf https umleiten.
Außerdem möchte ich die nicht www Aufrufe in www umleiten.

Für den ersten Punkt habe ich ein Rule, die soweit funktioniert. Wenn ich die zweite Rule hinzufüge, meldet der Server/Browser einen internen Fehler. Was ist hier falsch?

Rule für HTTP zu HTTPS:
	<rewrite>
		<rules>
		  <rule name="Weiterleitung HTTP zu HTTPS">  
			<match url="(.*)" />  
			<conditions>
			  <add input="{HTTPS}" pattern="off" ignoreCase="true" />  
			</conditions>
			<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent"/>  
		  </rule>
		</rules>
    </rewrite>

Rule für nicht www zu www:
<rules>
<rule name="Redirect to www">  
  <match url=".*" />  
  <conditions logicalGrouping="MatchAny">  
    <add input="{HTTP_HOST}" pattern="^(www\.)(.*)$" negate="true" />  
  </conditions>
  <action type="Redirect" url="http://www.{HTTP_HOST}/{R:0}" redirectType="Permanent"/>  
</rule>
</rules>

Sobald ich beide Rules in die Web.config packe, funktioniert der Aufruf der Webseite nicht mehr.
Packe ich in der ersten Rule hinter https://www.{HTTP_HOST}... funktioniert der Aufruf über domain.com aber nicht über www.domain.com weil dann das www. doppelt in der URL steht, also www.www.domain.com

Jemand eine Idee?

Vielen Dank!

Content-Key: 340068

Url: https://administrator.de/contentid/340068

Printed on: April 27, 2024 at 03:04 o'clock

Member: falscher-sperrstatus
falscher-sperrstatus Jun 08, 2017 at 12:19:11 (UTC)
Goto Top
Warum kombinierst du beides nicht?

Wenn www und/oder https nicht zutrifft leite auf https://www. usw weiter?
Member: aekakias
aekakias Jun 08, 2017 at 12:41:52 (UTC)
Goto Top
Das benötige ich, aber alle meine Versuche führen zu internen Fehler im Browser oder zum Fehler "Die Seite hat Sie zu oft weitergeleitet"

	<rewrite>
		<rules>
		  <rule name="Weiterleitung>  
			<match url=".*" />  
			<conditions>
                          <add input="{HTTP_HOST}" pattern="^(www\.)(.*)$" negate="true" />  
                          <add input="{HTTP_HOST}" pattern="^(http://\.)(.*)$" negate="true" />  
			  <add input="{HTTPS}" pattern="off" ignoreCase="true" />  
			</conditions>
			<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent"/>  
		  </rule>
		</rules>
    </rewrite>

Ist das Ansatzweise korrekt?
Member: SeaStorm
SeaStorm Jun 08, 2017 updated at 14:23:03 (UTC)
Goto Top
Hi

hab mir deines jetzt nicht angeschaut, aber meine UML sieht so aus
        <rule name="Add WWW" enabled="true" stopProcessing="true">  
          <match url="(.*)"/>  
          <conditions>
            <add input="{HTTP_HOST}" pattern="^www\.([.a-zA-Z0-9]+)$" negate="true"/>  
          </conditions>
          <action type="Redirect" url="https://www.{HTTP_HOST}/{R:0}" appendQueryString="true" redirectType="Permanent"/>  
        </rule>
        <rule name="Force HTTPS" enabled="true" stopProcessing="true">  
          <match url="(.*)" ignoreCase="false"/>  
          <conditions>
            <add input="{HTTPS}" pattern="^off$"/>  
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" appendQueryString="true" redirectType="Permanent"/>  
        </rule>

EDIT: Kurz auf deins geguckt:
du willst ja WWW vorne haben, leitest aber nicht auf www um. Deines oben könnte nur http auf https umleiten. Wenn der User aber nicht www davorschreibt, wird er nicht auf WWW landen. Nur auf HTTPS, weshalb deine Regel WIEDER greift(da kein www) und ihn ERNEUT umleitet, weiterhin ohne WW, weshalb deine Regel wieder greift ... usw
Member: SeaStorm
SeaStorm Jun 08, 2017 updated at 14:27:32 (UTC)
Goto Top
hab ich auch mal probiert, bin dann aber am Fall "user kommt mit "http://www..." an. Dann schreibt das Ding, weil es HTTP sieht hin "HTTPS:\\www.{HTTP_HOST},
was https://www.www.... ergibt.
Hatte damals dann keine Lust mehr und bin irgendwann bei dem unten gelandet. Das macht im Zweifelsfall 2 Umleitungen, dafür aber zuverlässig face-smile
Member: Kraemer
Kraemer Jun 08, 2017 updated at 14:32:12 (UTC)
Goto Top
Zitat von @SeaStorm:
<add input="{HTTP_HOST}" pattern="^www\.([.a-zA-Z0-9]+)$" negate="true"/>
die Regel ist allerdings alles andere als sauber! vor allem aber das - (Minus) für den Domainnamen fehlt!

Gruß
Member: aekakias
aekakias Jun 08, 2017 at 14:35:23 (UTC)
Goto Top
Das funktioniert bei dir?

Bei mir wird aus domain.com = www.www.domain.com
Member: SeaStorm
SeaStorm Jun 08, 2017 at 14:42:01 (UTC)
Goto Top
wie das? erste Regel greift nur, wenn KEIN www da steht. zweite interessiert sich nicht für WWW oder nicht.
Member: SeaStorm
SeaStorm Jun 08, 2017 at 14:42:53 (UTC)
Goto Top
Bin für Verbesserungen immer zu haben face-smile Aber das mit dem Minus verstehe ich jetzt nicht
Member: Kraemer
Kraemer Jun 08, 2017 at 14:46:46 (UTC)
Goto Top
Zitat von @SeaStorm:

Bin für Verbesserungen immer zu haben face-smile Aber das mit dem Minus verstehe ich jetzt nicht
siehe da:
https://regex101.com/r/Hxu5Sk/2
Member: SeaStorm
SeaStorm Jun 08, 2017 updated at 14:57:38 (UTC)
Goto Top
ach gott jetzt verstehe ich face-smile

Ja ist richtig, mein pattern ist nicht unbedingt universell einsetzbar. für unsere Domains OK, da wir keine Striche oÄ drin haben.

um im Beispiel zu bleiben : ^www\.([.\-a-zA-Z0-9]+)$

und für die ganz fiesen Fälle halt : ^www\.(.*+)$
Member: aekakias
aekakias Jun 09, 2017 updated at 07:28:17 (UTC)
Goto Top
Also bei mir funktioniert dein Code nicht.

Ich habe jetzt
^www\.([.\-a-zA-Z0-9]+)$

durch

^www\.(.*+)$

ersetzt, aber bei aufruf der Domain ohne www erscheint folgende Fehlermeldung:

The page cannot be displayed because an internal server error has occurred.

Bei Aufruf der Domain mit www wird ein www. davor gepackt und die endgültige Domain lautet dann: www.www.meine-domain.com

Was bedeutet in diesem Fall internal server error?

Kann man sich mehr Informationen anzeigen lassen?


Wenn ich außerdem auf der regex tester webseite eine domain ohne www eintrage wird diese nicht als match angezeigt.
ttps://regex101.com/r/Hxu5Sk/3
Mitglied: 133417
133417 Jun 09, 2017 updated at 18:43:57 (UTC)
Goto Top
Das Funktioniert hier problemlos:
                <rule name="Redirect to HTTPS" stopProcessing="true">  
                    <match url="(.*)" />  
                    <conditions logicalGrouping="MatchAny">  
                        <add input="{HTTPS}" pattern="^OFF$" />  
                    </conditions>
                    <action type="Redirect" url="https://{HTTP_HOST}{R:1}" />  
                </rule>
                <rule name="Redirect to WWW" stopProcessing="true">  
                    <match url="(.*)" />  
                    <conditions>
                        <add input="{HTTP_HOST}" pattern="^www\." negate="true" />  
                    </conditions>
                    <action type="Redirect" url="https://www.{HTTP_HOST}{R:1}" />  
                </rule>
Gruß
Member: aekakias
aekakias Jun 09, 2017 at 12:54:49 (UTC)
Goto Top
Ich habe es jetzt so gelöst und es funktioniert:

	<rewrite>
      <rules>
        <rule name="Weiterleitung non-www zu www" patternSyntax="Wildcard" stopProcessing="true">  
          <match url="*" />  
          <conditions>
            <add input="{HTTP_HOST}" pattern="meine-domain.de" />  
          </conditions>
          <action type="Redirect" url="https://www.meine-domain.de/{R:0}" redirectType="Permanent" />  
        </rule>
        <rule name="HTTPS Erzwingen" enabled="true" stopProcessing="true">  
          <match url="(.*)" ignoreCase="false"/>  
          <conditions>
            <add input="{HTTPS}" pattern="^off$"/>  
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" appendQueryString="true" redirectType="Permanent"/>  
        </rule>
      </rules>
    </rewrite>
Mitglied: 133417
133417 Jun 09, 2017 updated at 18:45:21 (UTC)
Goto Top
Ist ja nur anders rum, ist ja auch egal.
Dann noch den Haken bitte nicht vergessen.
Member: aekakias
aekakias Jun 12, 2017 at 14:35:20 (UTC)
Goto Top
Was meinst du mit Haken?
Member: SeaStorm
SeaStorm Jun 12, 2017 at 14:46:25 (UTC)
Goto Top
die Frage als Gelöst markieren, am besten den Beitrag der es für dich gelöst hat
Member: falscher-sperrstatus
falscher-sperrstatus Jun 12, 2017 at 14:50:36 (UTC)
Goto Top
Zitat von @SeaStorm:

die Frage als Gelöst markieren, am besten den Beitrag der es für dich gelöst hat

bzw, alle, die dazu führten. VG