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-ID: 340068

Url: https://administrator.de/forum/web-config-weiterleitung-nicht-www-zu-www-und-http-zu-https-340068.html

Ausgedruckt am: 27.12.2024 um 09:12 Uhr

certifiedit.net
certifiedit.net 08.06.2017 um 14:19:11 Uhr
Goto Top
Warum kombinierst du beides nicht?

Wenn www und/oder https nicht zutrifft leite auf https://www. usw weiter?
aekakias
aekakias 08.06.2017 um 14:41:52 Uhr
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?
SeaStorm
SeaStorm 08.06.2017 aktualisiert um 16:23:03 Uhr
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
SeaStorm
SeaStorm 08.06.2017 aktualisiert um 16:27:32 Uhr
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
Kraemer
Kraemer 08.06.2017 aktualisiert um 16:32:12 Uhr
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ß
aekakias
aekakias 08.06.2017 um 16:35:23 Uhr
Goto Top
Das funktioniert bei dir?

Bei mir wird aus domain.com = www.www.domain.com
SeaStorm
SeaStorm 08.06.2017 um 16:42:01 Uhr
Goto Top
wie das? erste Regel greift nur, wenn KEIN www da steht. zweite interessiert sich nicht für WWW oder nicht.
SeaStorm
SeaStorm 08.06.2017 um 16:42:53 Uhr
Goto Top
Bin für Verbesserungen immer zu haben face-smile Aber das mit dem Minus verstehe ich jetzt nicht
Kraemer
Kraemer 08.06.2017 um 16:46:46 Uhr
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
SeaStorm
SeaStorm 08.06.2017 aktualisiert um 16:57:38 Uhr
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\.(.*+)$
aekakias
aekakias 09.06.2017 aktualisiert um 09:28:17 Uhr
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
133417
133417 09.06.2017 aktualisiert um 20:43:57 Uhr
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ß
aekakias
aekakias 09.06.2017 um 14:54:49 Uhr
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>
133417
133417 09.06.2017 aktualisiert um 20:45:21 Uhr
Goto Top
Ist ja nur anders rum, ist ja auch egal.
Dann noch den Haken bitte nicht vergessen.
aekakias
aekakias 12.06.2017 um 16:35:20 Uhr
Goto Top
Was meinst du mit Haken?
SeaStorm
SeaStorm 12.06.2017 um 16:46:25 Uhr
Goto Top
die Frage als Gelöst markieren, am besten den Beitrag der es für dich gelöst hat
certifiedit.net
certifiedit.net 12.06.2017 um 16:50:36 Uhr
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