Im Rahmen eines Onlineshop SEO Audits fiel unserem Team auf, dass in der aktuellen Implementierung (04.01.22) der .htaccess des JTL-Shops die Weiterleitungen für SSL + www. Subdomain zu einer Weiterleitungskette ("Redirect hell") führen, die sich negativ auf die Suchmaschinenwertung auswirken können.
Konkret heißt dies, dass beim Aufruf der Domain
http://example.com
zunächst auf
https://example.com
weitergeleitet wird, dann schlimmstenfalls auf
http://www.example.com
und erst dann auf die eigentliche Zieldomain:
https://www.example.com
Ursache ist die folgende vorgeschlagene Implementierung, die zwar sehr flexibel ist, aber so zu diesen Mehrfach-Weiterleitungen führt:
<IfModule mod_rewrite.c> RewriteEngine on #REWRITE ANPASSUNG 1 (REWRITEBASE) #Wenn Ihr Shop in einem Unterverzeichnis (also z.B. meinedomain.de/meinverzeichnis) installiert ist, so kommentieren Sie die kommende Zeile aus und passen Sie den Verzeichnisnamen an #RewriteBase / #REWRITE ANPASSUNG 2 (auf www.meinedomain.de umleiten) #Ihr Shop sollte nicht unter www.meinedomain.de und nur meinedomain.de erreichbar sein, siehe: https://guide.jtl-software.de/index.php?title=JTL-Shop3-Neuinstallation#4._Einrichtung_einer_Domainweiterleitung #Achten Sie darauf, daß Sie bei Verwendung der SSL-Verschlüsselung das Weiterleitungsziel unbedingt mit https und nicht nur mit http angeben! #RewriteCond %{HTTP_HOST} !^www\.meinedomain\.de$ [NC] #RewriteRule ^(.*)$ http(s)://www.meinedomain.de/$1 [R=301,L] #REWRITE ANPASSUNG 3 (Entfernt abschließenden Slash per 301-Redirect) #RewriteCond %{REQUEST_FILENAME} !-f #RewriteCond %{REQUEST_FILENAME} !-d #RewriteCond %{REQUEST_URI} ^(.*)/$ #RewriteRule ^. %1 [R=301,L] #REWRITE ANPASSUNG 4 (Weiterleitung auf SSL-Verschlüsselung bei Aufruf über http) #Diese Angabe entlastet die PHP-Engine von Weiterleitungen anhand Einstellung 192 und sorgt zusätzlich dafür, daß auch statische Resourcen über https ausgeliefert werden. #RewriteCond %{HTTPS} !=on #RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] [...]
(Quelle: https://gitlab.com/jtl-software/jtl-shop/core/-/blob/master/.htaccess)
Wünschenswert wäre allerdings eine Weiterleitung, die immer direkt von non-SSL und / oder non-www Anfragen zu SSL+www weiterleitet! Es soll also stets in einem Schritt zu
https://www.example.com
weitergeleitet werden, egal ob die Anfrage von
http://example.com
oder
https://example.com
oder
http://www.example.com
stammt!
Meine finale Lösung sieht nun wie folgt aus:
# Redirect all users to the site WITH https:// AND www. (in only ONE redirect): RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC] RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=301]
Sie kombiniert www. + SSL in einem Redirect und sollte auch (dank "X-Forwarded-Proto") mit Proxies korrekt umgehen können!
Zudem war mir wichtig, dass die URL vollständig dynamisch aufgebaut wird und keine manuelle Eintragung / Anpassung erforderlich ist.