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.