Michael Buchholz: Beiße mir an RewriteRule die Zähne aus... Kann wer helfen?

Hallo liebe Leute,

ich habe jetzt Tage damit verbracht, das irgendwie an den Start zu bringen, bekomme es aber irgendwie nicht hin.

Was will ich überhaupt?

  1. http immer auf https umleiten
  2. www.domäne.tld immer auf domäne.tld umleiten nebst Anhängsel
  3. sub.domäne.tld immer auf https://sub.domäne.tld umleiten

1 und 2 funktionieren eingentlich immer, aber sobald eine zweite Subdomäne ins Spiel kommt (www. ist ja auch eine), scheitere ich kläglich...

Also ...

http://domain.tld(/../..)     --> https://domain.tld(/../..)
http://www.domain.tld(/../..) --> https://domain.tld(/../..)
http://sub.domain.tld         --> https://sub.domain.tld

... wobei (/../..) beliebig angehängte Dinge wie Unterverzeichnisse oder Parameter natürlich mit übernommen werden sollen (ist bei sub.domain.tld nicht nötig, schadet aber auch nicht)

Mein letzter, nicht funktionierender Versuch lautet wie folgt, wobei ich Euch alle vorhergehenden Versuche hier mal ersparen möchte:

	RewriteEngine On
	RewriteCond %{HTTPS} off
	RewriteRule ^(.*)$ https://domain\.tld$1 [R=301]
	RewriteCond %{HTTP_HOST} ^sub\.
	RewriteRule ^(.*)$ https://sub\.domain\.tld [R=301,L]

Ich bin da irgendwie zu blöd zu grummel

  1. ... hmmm, nachträglich editieren geht nicht? Na gut, dann so ...

    EDIT sagt: Basis ist ein Wiondows- Server (VPS) mit Apache, das ganze Rewriting steht in der entsprechenden conf für die Domäne und nicht in der htaccess ...

    1. Hallo Michael Buchholz,

      ... hmmm, nachträglich editieren geht nicht? Na gut, dann so ...

      Nachträglich editieren geht innerhalb eines bestimmten Zeitfensters und wenn es noch keine Antwort gegegeben hat.

      Bis demnächst
      Matthias

      --
      Pantoffeltierchen haben keine Hobbys.
      ¯\_(ツ)_/¯
  2. Hi,

    Mein letzter, nicht funktionierender Versuch lautet wie folgt, wobei ich Euch alle vorhergehenden Versuche hier mal ersparen möchte:

    	RewriteEngine On
    	RewriteCond %{HTTPS} off
    	RewriteRule ^(.*)$ https://domain\.tld$1 [R=301]
    

    Hier wird alles, was nicht HTTPS ist, auf https://domain.tld umgeschrieben.

    	RewriteCond %{HTTP_HOST} ^sub\.
    	RewriteRule ^(.*)$ https://sub\.domain\.tld [R=301,L]
    

    von http://sub.domain.tld kann also nicht mehr auf https://sub.domain.tld umgeleitet werden, da das sub ja schon von der ersten Regel plattgemacht wurde.

    Den Spezialfall (sub ...) zuerst behandeln.

    cu,
    Andreas a/k/a MudGuard

    1. ... ähhh ... ja .. da wirst Du wohl Recht haben 🙄

      Ok, das teste ich morgen gleich mal aus. Wenn das dann klappt mache ich erst mal ein Fässchen auf, damit dsa vor die Stirn schlagen nicht so weh tut 😂

    2. ... also ja, mit Umstellen funktioniert das, zumindest auf eine Domäne bezogen ...

      Ich habe im Netz noch eine andere Nummer gefunden, die ziemlich geschickt aufgebaut ist und sich eigentlich ohne Änderungen für alle Domänen eignen dürfte. Ich hätte auch kein Problem damit, das in den htaccess unterzubringen (dort funktioniert [OR]/[AND] im Gegensatz zu den conf- Dateien, wenn ich das richtig sehe). Nur umbauen müsste ich es noch, damit es meinen Zielen gerecht wird. Aber hier mal der Schippsel...

      RewriteEngine On
      RewriteCond %{HTTP_HOST} !=""
      RewriteCond %{HTTP_HOST} !^www\. [NC]
      RewriteCond %{HTTPS}s ^on(s)|
      RewriteRule ^ http%1://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
      
      

      Da sollte jetzt noch ein http Forward abgefangen werden. Dann müsste das so aussehen meine ich?

      RewriteEngine On
      RewriteCond %{HTTP_HOST} !=""
      RewriteCond %{HTTP_HOST} !^www\. [NC]
      RewriteCond %{HTTP:X-Forwarded-Proto} !https [OR]
      RewriteCond %{HTTPS}s ^on(s)|
      RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
      

      Nun muss ich das irgendwie so umbauen, das zum einen die Funktion "ohne www" -> "mit www" umgedreht wird, zum anderen jedwede angegebene Subdomäne außer www mit in die letzte Zeile übergeben wird.

      Was ich nicht weiß ist, was genau in HTTP_HOST und REQUEST_URI drin steht? Ich vermute lediglich, das im Ersteren "domäne.tld", im Letzteren "/bla/blub" zu finden ist, falls angegeben? Im Weiteren vermute ich, das in HTTP_HOST eine angegebene Subdomäne nicht auftaucht?

      Viele, viele Vermutungen aber kein Wissen. Vielleicht kann ich das mit Eurer Hilfe zu Wissen umwandeln?