Februar 26, 2024

Weiterleitungen vermeiden. Das Bild zeigt ein heftiges Schneegestöber, dass drei winterlich bekleidete Wanderer umhüllt.

Wie du deine .htaccess-Datei optimierst und doppelte Weiterleitungen vermeidest

t3n Magazin - Ausgabe 72

Der folgende Artikel von mir wurde zuerst im Magazin t3n, Ausgabe 72 veröffentlicht:


Ein Punkt, der bei der Auslieferung der Website durch Apache-Server oft wenig Beachtung findet, ist die Optimierung der .htaccess-Datei. Daher findet man auch bei größeren Websites nicht selten doppelt oder gar dreifach hintereinander ausgeführte Weiterleitungen. Wie du leicht selber überprüfen kannst, ob das bei dir der Fall ist und wie du es besser machen kannst, erkläre ich in diesem Artikel.

More...

Doppelte Weiterleitungen verstehen

Wie doppelte Weiterleitungen entstehen und warum sie vermieden werden sollten

Webserver können grundsätzlich doppelte Inhalte erzeugen, da dieselben Daten über unterschiedliche URLs verfügbar sein können. Wenn deine Website nicht über die richtigen Rewrite-Regeln verfügt, erzeugt das doppelte Inhalte. Diese sind schlecht für das Ranking der Netzpräsenz. Die folgenden Beispiele geben technisch gesehen jeweils eine gültige Seite zurück, wenn keine Rewrite-Regeln erstellt wurden.

http://cyberspice.de/blog
http://cyberspice.de/blog/
http://www.cyberspice.de/blog
http://www.cyberspice.de/blog/
https://cyberspice.de/blog
https://cyberspice.de/blog/
https://www.cyberspice.de/blog
https://www.cyberspice.de/blog/

Das Problem sind die unterschiedlichen Kombinationen mit http:// oder https://, mit oder ohne www. und mit oder ohne den abschließenden Backslash.

Auswirkungen von doppelten Weiterleitungen auf die Performance

Doppelte Weiterleitungen stellen ein Problem dar, weil sie die Ladegeschwindigkeit der Website verzögern und zusätzlich Verwirrung bei den Suchmaschinen verursachen. Für den Besucher der Website  Netzpräsenz ergeben sich höhere Ladezeiten und damit verbunden längere Wartezeiten, bis die Website angezeigt werden kann.

Verständnis der Struktur einer .htaccess-Datei

Überblick über die grundlegende Struktur und Syntax einer .htaccess-Datei

Die Bezeichnung .htaccess steht für „Hypertext Access“ und ermöglicht uns, direkt das Webserververhalten zu steuern. Die Direktiven in der Datei sind in einer bestimmten Syntax geschrieben und können verwendet werden, um eine Vielzahl von Optionen für den Webserver festzulegen.

Die in einer .htaccess-Datei verwendete Syntax wird „Apache-Direktive“ genannt, da sie die vom Apache-Webserver verwendete Konfigurationssprache enthält. Es handelt sich nicht um eine eigene Programmiersprache, sondern nur um eine Reihe von Anweisungen, mit denen das Verhalten des Servers gesteuert wird.

Nun ist es wichtig zu beachten, dass nicht alle Webserver .htaccess-Dateien verwenden. Sie sind spezifisch für den Apache-Webserver. Laut Statista hatten .htaccess-Dateien im Februar 2023 einen Marktanteil von 20,7 %. Doch auch für nginx-Server (Marktanteil 19,3 %) gibt es ein Plugin, welches das htaccess-Verhalten in nginx implementiert und insbesondere Methoden wie „RewriteRule“, „Allow“ und „Deny“, die für die Web-Sicherheit entscheidend sein können, zugänglich macht.

Die Direktiven in einer .htaccess-Datei folgen immer einer bestimmten Syntax. Wenn wir die .htaccess-Datei öffnen, können wir einzelne Umleitungen anlegen.

## Rewrite Engine einschalten
RewriteEngine on

# Unterseiten auf Neue Seite umleiten
RewriteRule ^seite1\.html$ /neueseite.html [R=301,L]
RewriteRule ^seite2\.html$ /neueseite.html [R=301,L]
RewriteRule ^seite3\.html$ /neueseite.html [R=301,L]

#  Dies ist ein Kommentar         

Wie du hier sehen kannst, wird „#“ für die Kommentarzeile genutzt. Kommentare enden immer mit Zeilenumbruch. Kommentarabsätze werden nicht unterstützt. Wenn ein Kommentar über mehrere Zeilen hinweg angelegt werden soll, so muss jede einzelne Zeile mit # starten.

RewriteEngine on
RewriteRule <pattern> <substitution> [<flags>]

Die RewriteEngine Direktive aktiviert die „Rewrite Engine“. Die RewriteRules werden verwendet, um URLs umzuschreiben und Aufrufe umzuleiten.

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301, L]
RewriteEngine On

Aktiviert die „Rewrite Engine“.

RewriteCond %{HTTPS} off

Prüft, ob die Anfrage nicht über HTTPS erfolgt.

RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301, L]

Wenn diese Bedingung erfüllt ist, wird die Anfrage an dieselbe URL mit einem 301-Statuscode über HTTPS umgeleitet. [R=301, L] gibt an, dass es sich um eine permanente Weiterleitung handelt und keine weiteren Regeln mehr bearbeitet werden sollten.

Permanente Redirects (301 status code) sind aus SEO-Gründen gegenüber temporären Weiterleitungen (302 status code) zu bevorzugen, da sie den Suchmaschinen vermitteln, dass die Weiterleitung dauerhaft ist und die Indizes entsprechend aktualisieren werden sollten.

Direktiven zusammenfassen

Wenn beispielsweise nach einem Domainumzug mehrere Umleitungen in der .htaccess-Datei existieren, so können wir diese zusammenfassen, da alle drei Regeln auf die neue Ziel-URL umleiten.

RewriteRule ^seite1\.html$ /neueseite.html [R=301,L]
RewriteRule ^seite2\.html$ /neueseite.html [R=301,L]
RewriteRule ^seite3\.html$ /neueseite.html [R=301,L]

Diese Weiterleitungen lassen sich durch eine einzige Regel ersetzen, die alle Fälle abdeckt:

RewriteRule ^(seite1|seite2|seite3)\.html$ /neueseite.html [R=301,L]

In bestimmten Fällen können reguläre Ausdrücke helfen, Anwendungsfälle zusammenzuführen. Wir haben beispielsweise zwei veraltete Seiten, die auf eine neue umgeleitet werden sollen:

Redirect 301 /alte-seite-1.html https://beispiel.de/neueseite/
Redirect 301 /alte-seite-2.html https://beispiel.de/neueseite/

Beide Weiterleitungen führen zur neuen URL https://cyberspice.de/neueseite/. Durch die Verwendung eines regulären Ausdrucks wird daraus:

RedirectMatch 301 ^/alte-seite-(1|2)\.html$ https://cyberspice.de/neueseite/

Im regulären Ausdruck steht das Zeichen | für ein logisches ODER, das entweder „1“ oder „2“ als Übereinstimmung zulässt. Der Backslash vor dem Punkt und das Dollarzeichen dienen als Escape-Zeichen. Sie werden in regulären Ausdrücken verwendet, um Sonderzeichen, die eine besondere Bedeutung haben, zu umgehen. Das Dollarzeichen steht für das Ende einer Zeichenfolge. In unserem Beispiel wird es verwendet, um sicherzustellen, dass der reguläre Ausdruck nur mit dem vollständigen URL-Pfad übereinstimmt und nicht nur mit einer Teilübereinstimmung. Im regulären Ausdruck ^/alte-seite-(1|2)\.html$ stellen die Backslashes vor dem Punkt und dem Dollarzeichen also sicher, dass nur der vollständige URL-Pfad von /alte-seite-1.html oder /alte-seite-2.html übereinstimmt und keine anderen ähnlichen URLs, die möglicherweise eine andere Endung oder Erweiterung haben.

Überprüfen einer .htaccess-Datei

Analyse einer .htaccess-Datei, um mögliche Probleme mit doppelt ausgeführten Weiterleitungen zu identifizieren

Auf der Root-Domain wird der Schrägstrich immerhin nicht als separate Seite behandelt.  https://www.cyberspice.de/ und https://www.cyberspice.de werden also nicht doppelt ausgewertet. (Quelle: John Mu/Google: https://twitter.com/JohnMu/status/943076424130363392)

Üblicherweise wird die .htaccess-Datei verwendet, um eine Website zu zwingen, nur https:// oder nur www. als Subdomain zu verwenden. So lässt sich sicherstellen, dass die Website keine doppelt verfügbaren Inhalte bereitstellt, wie dieses häufig verwendete Beispiel zeigt:

# Rewrite Engine einschalten
RewriteEngine On

RewriteCond %{HTTPS} !=on

# https erzwingen
RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# www erzwingen
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Verwendung von Entwicklertools zur Überprüfung von doppelten Weiterleitungen

Das Ergebnis der Weiterleitung testen wir, indem wir die .htaccess-Datei in das root-Verzeichnis unseres Webservers laden und diese URL anschließend (mit http://) im Browser aufrufen.

Das Layout eines Standardbrowserfensters mit Aufruf einer http-Adresse.

Abbildung 1: Wenn ich die Eingabetaste drücke, wird die Seite geladen und die URL wird entsprechend weitergeleitet.

Standard Browserfenster mit Abruf einer https:// Domain.

Abbildung 2: Wir erhalten nun eine https-Verbindung mit der Beispieldomain. Die Weiterleitung hat also geklappt.

Die Weiterleitung funktioniert und das reicht vielen Webentwicklern dann meistens auch schon. Doch das eigentliche Problem, dass in einer unnötigen, doppelt ausgeführten Weiterleitung besteht, können wir erst sehen, wenn wir uns mit den Entwicklerwerkzeugen den Datenverkehr ansehen. Anhand unserer Netzwerkanfragen können wir die tatsächlichen Abfragen unseres Webservers sehen. Wir sehen, dass in diesem Beispiel hintereinander zwei Weiterleitungen durchgeführt wurden.

Screenshot des Netzwerkverkehrs in Google Chrome

Abbildung 3: Dieser Screenshot zeigt, dass der Netzwerkverkehr zweimal umgeleitet wurde.

Screenshot des Netzwerktraffics in Google Chrome.

Abbildung 4: Hier sehen wir, dass die http-Antwort-Header uns einen Hinweis darauf geben, wo unser Problem liegt. Wenn wir nach der Eingabe von http://cyberspice.de/ die Eingabetaste drücken, werden wir zu https://cyberspice.de/ umgeleitet.

Screenshot des Netzwerkverkehrs in Google Chrome.

Abbildung 5: Wenn der Browser die neue URL https://cyberspice.de/ anfordert, wird er noch mal weitergeleitet auf https://www.cyberspice.de/.

Screenshot des Netzwerktraffics in Google Chrome

Abbildung 6: Google Chrome versucht, uns mit der dritten URL zu verbinden.

Schließlich versucht unser Browser, uns mit der dritten URL zu verbinden: https://www.cyberspice.de/, und erhält als Antwort daraufhin den Statuscode: 200 Success.

Mögliche Vorgehensweise zur Vermeidung von doppelten Weiterleitungen

Zusammenfassung mehrerer Umleitungen in eine einzige Umleitung

Der Webserver liest .htaccess-Dateien von oben nach unten. Anhand unserer vorherigen .htaccess-Datei wurde zuerst nach www. gesucht. Wenn dieses nicht vorhanden war, wurde es mit einer Umleitung hinzugefügt. Nach dieser Umleitung wurde dann die Umleitung https:// hinzugefügt.

Der richtige Weg ist, anhand der .htaccess zuerst nach www. und dann nach https:// zu suchen. Wenn einer der gewünschten URL-Parameter nicht korrekt ist, verwenden wir eine einzige RewriteRule, um diese URL zu ändern. Diese Methode führt dann nur zu einer einzigen 301-Weiterleitung.

Zuerst schalten wir die Rewrite Engine ein.

RewriteEngine On

Die folgende Zeile ist eine Bedingung, die überprüft, ob die Anfrage HTTPS nicht verwendet. %{HTTPS} ist eine Apache-Server-Variable, die entweder „on“ oder „off“ enthält. Der Operator „!=“ prüft, ob der Wert von %{HTTPS} ungleich „on“ ist. Die Bedingung ist also nur dann erfüllt, wenn die aktuelle Anfrage kein HTTPS verwendet.

RewriteCond %{HTTPS} !=on

Als Nächstes prüfen wir, ob bei URLs ohne Dateipfad am Ende ein Schrägstrich steht. Server als auch Browser setzen standardmäßig ein abschließendes / an das Ende von Verzeichnis-URLs, nicht aber an das Ende von Dateinamen. Diesen Standard wollen wir beibehalten und nehmen ihn daher mit auf in die .htaccess-Datei.


Die RewriteRule übernimmt die URL unserer ersten RewriteCond (.+) und fügt sie gefolgt von einem abschließenden Schrägstrich an die definierte Domäne an. Die Erfassungsgruppe (.+) erfasst den Pfad nur, wenn er ein oder mehrere Zeichen enthält. Dadurch wird sichergestellt, dass wir kein zweites / auf dem Stammverzeichnis der Website platzieren. Die genannte URL der Website enthält sowohl das www als auch https://. Daher wird die Internetadresse bereits beim ersten Mal an die richtige Stelle weitergeleitet.

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^(.*)/$ https://www.cyberspice.de/$1 [R=301,L]

Weiter müssen wir prüfen, ob www. in der angeforderten URL enthalten ist und https das verwendete Protokoll ist. In der ersten Zeile wird geprüft, ob unser www fehlt. Dabei ist es wichtig, die Groß- und Kleinschreibung zu beachten [NC].

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Unsere letzte RewriteRule nimmt den angeforderten Pfad und hängt ihn an die Domain an, wobei www und https hinzugefügt werden.

RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Unser Ergebnis sieht dann folgendermaßen aus:

#### Erzwingen von HTTPS://WWW und Entfernen des nachgestellten / bei Dateinamen ####
# Rewrite Engine einschalten
RewriteEngine On
RewriteCond %{HTTPS} !=on

# Backslash bei Dateinamen am Ende entfernen
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^(.*)/$ https://www.cyberspice.de/$1 [R=301,L]

# www erzwingen
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# https erzwingen
RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Probieren wir aus, was passiert, wenn wir http://cyberspice.de aufrufen.

Screenshot des Netzwerkverkehrs in Google Chrome

Abbildung 7: Die Bestätigung: Es hat nur eine Weiterleitung stattgefunden.

Google Chrome Screenshot des Netzwerkverkehrs

Abbildung 8: Es wurde nur einmal weitergeleitet.

Wie wir sehen, gab es nur eine 301-Weiterleitung! Das ist besser und schneller als die doppelten oder dreifachen Weiterleitungen, die noch häufig eingesetzt werden.

Bewährte Praktiken für die Arbeit mit .htaccess-Dateien

Bevor Änderungen an der .htaccess Datei durchgeführt werden, sollte eine Sicherungskopie angelegt werden. Die Änderungen führt man am besten in einer Testumgebung durch, bevor sie in der Produktion eingesetzt werden.

Wenn Weiterleitungen auf die beschriebene Weise zusammengeführt werden können, wird sich die Ladegeschwindigkeit der Website verbessern.

Quellenangaben

Zusätzliche Ressourcen für weiteres Lernen und Unterstützung:
Führende Webserversysteme 02-2023:  
https://de.statista.com/statistik/daten/studie/181588/umfrage/marktanteil-der-meistgenutzten-webserver/
htaccess für Nginx-Server:
https://github.com/e404/htaccess-for-nginx
Syntaxbeispiele:
.htaccess Cheat Sheet:
https://htaccesscheatsheet.com/

Über den Autoren

Stephan Bender

Meine Aufgabe besteht darin Qualität zu visualisieren und die Kommunikation von Menschen und Marken zu verbessern, damit die Botschaften so geschärft werden, dass sie bei der Zielgruppe einen optimalen Eindruck hinterlassen kann.

{"email":"Email address invalid","url":"Website address invalid","required":"Required field missing"}

Weitere Artikel:

Subscribe now to get the latest updates!