301-Redirects - Weiterleitungen mit .htaccess
Veröffentlicht am 02.09.2020 von DomainFactory
Weiterleitungen – und zwar permanente Weiterleitungen, bei denen der Webserver dem Client und auch dem Crawler der Suchmaschine den Statuscode 301 übermittelt – sind aus SEO-Sicht sehr wichtig. Hier zeigen wir Ihnen, wie Sie mit Hilfe der sogenannten .htaccess-Datei flexibel Weiterleitungen (Redirects) realisieren.Was ist die .htaccess?
Die .htaccess gilt bei Profis als Geheimwaffe für Website-Admins. Dateien mit dem Namen .htaccess (ohne Endung, der Punkt am Anfang kennzeichnet in der Unix-Welt versteckte Dateien) sind Server-Konfigurationsdateien für Webserver, insbesondere für Apache. Dieser übernahm das Konzept der .htaccess-Dateien vom Webserver NCSA httpd, der in den Anfangszeiten des WWW eine Zeitlang das Internet dominierte und als Basis für die Apache-Entwicklung diente. Wichtigster Anwendungskontext war bereits damals das Shared Hosting: Eine Webserver-Software ist für die Auslieferung mehrerer, voneinander unabhängiger Websites zuständig. Um diese individuell steuern zu können, sollte neben der zentralen Konfiguration (bei Apache über die httpd.conf) auch eine Konfiguration pro Verzeichnis möglich sein. Genau das leistet die .htaccess.
Bei jedem Aufruf einer Seite prüft der Webserver sämtliche Verzeichnisse der Dateistruktur oberhalb des angeforderten Dokuments auf das Vorhandensein solcher Konfigurationsdateien, liest sie ein und überschreibt die Default-Vorgaben der zentralen Konfiguration mit den verzeichnisspezifischen Inhalten. Diese werden also sofort und ohne Neustart des Servers wirksam.
.htaccess erstellen und bearbeiten
Voraussetzung für eine Nutzung der .htaccess ist, dass Ihr Provider diese in der zentralen Konfiguration freigeschaltet hat. (Welche .htaccess-Features in verschiedenen Tarifen von DomainFactory verfügbar sind, finden Sie hier.) Häufig (z. B. bei WordPress) ist auf Ihrem Webspace bereits eine .htaccess-Datei vorhanden. Um eigene .htaccess-Funktionen zu nutzen, müssen Sie diese lediglich mit einem Texteditor bearbeiten. Sollte Ihr FTP-Programm keine .htaccess anzeigen, prüfen Sie bitte, ob dieses eventuell versteckte Dateien ausblendet. (Achtung: Wenn Sie Änderungen an einer .htaccess-Datei vornehmen, machen Sie bitte vorher ein Backup – Syntax-Fehler führen schnell zu einem Server Error 500).
Ist tatsächlich keine .htaccess-Datei vorhanden, erstellen Sie eine Textdatei und speichern Sie per FTP auf Ihrem Webspace. Sie können diese Datei „.htaccess“ nennen, denn das ist der in der Apache-Konfiguration voreingestellte Standardname (theoretisch könnte Ihr Provider aber auch eine andere Benennung vorgeben).
Die Direktiven (Befehle für eine spezifische Aufgabe oder Einstellung) in der .htaccess gelten stets für das Verzeichnis, in dem die Datei liegt, inkl. aller Unterverzeichnisse – solange dort nicht eine eigene .htaccess-Datei liegt, denn diese überschreibt die Vorgaben von .htaccess-Dateien in darüber liegenden Verzeichnissen.
Weiterleitungen per .htaccess: mod_alias und mod_rewrite
Anders als der Name suggeriert, kann über die .htaccess weit mehr konfiguriert werden als nur Zugriffseinstellungen. Zu beachten ist aber, dass ein großer Teil der Funktionalität des Apache-Webservers in kompilierten Modulen steckt. Für Weiterleitungen per .htaccess-Datei können Sie die Module mod_alias und mod_rewrite nutzen.
mod_rewrite ist ein Erweiterungsmodul zur flexiblen Manipulation von URLs mittels sogenannter Rewrite-Regeln. Das „Umschreiben“ kann URLs auf Dateipfade abbilden, aber auch auf andere interne oder externe URLs, interne Proxies bzw. Weiterverarbeitungen oder Fehlerseiten umleiten. In Ihrer .htaccess können Sie dieses Modul nur nutzen, wenn es in der Konfiguration von Apache geladen und aktiviert wurde. Infos darüber liefert die PHP-Funktion phpinfo().
Im Netz finden Sie häufig Anleitungen, die selbst für einfache Umleitungen mod_rewrite nutzen. Wir empfehlen dagegen bei einfachen URL-Manipulationen die „Redirect“-Direktive des Apache-Basismoduls mod_alias. Das Modul mod_rewrite ist zwar wesentlich mächtiger, erfordert aber auch mehr Know-how. So können schnell Syntaxfehler entstehen, wenn man sich nicht mit regulären Ausdrücken auskennt.
Weiterleitungen per Redirect
Redirect fordert beim Aufruf eines passenden URL-Pfades den Browser auf, die Ressource über eine andere URL anzufordern. Die Direktive erwartet die Angabe eines alten URL-Pfades, der neuen URL und ggf. eines Statuscodes. Syntax:
Redirect status alter_URL-Pfad URL
Der alte URL-Pfad (d. i. der Teil der URL nach Hostname + Port, case-sensitiv) beginnt mit einem Slash (/). Die neue URL geben Sie am besten als absoluten Pfad an. Default-Einstellung für den Statuscode ist „302“ bzw. „temp“ (temporäre Weiterleitung) – 301-Redirects müssen deshalb explizit angegeben werden! Einige Beispiele:
# Redirect auf eine neue Seite
Redirect 301 /altes-verzeichnis/alte-seite.html www.meine-domain.tld/neues-verzeichnis/neue-seite.html
# Redirect auf ein neues Verzeichnis
Redirect 301 /altes-verzeichnis/ www.meine-domain.tld/neues-verzeichnis/
# Redirect aller Seiten bei Umzug auf eine neue Domain (Navigationsstruktur bleibt gleich)
Redirect 301 / neue-domain.tld
# Redirect aller Seiten bei Umzug auf eine neue Domain (geänderte Navigationsstruktur, daher Weiterleitung auf Startseite)
Redirect 301 / neue-domain.tld/startseite.html
❗ Achtung: Redirect-Anweisungen werden nacheinander abgearbeitet, wobei zuerst gelistete Anweisungen Priorität haben – passt die Pfadangabe zu einem Aufruf, wird die entsprechende Anweisung ausgeführt und weitere ignoriert. Betreffen mehrere Anweisungen die gleichen Pfade (z.B. /verzeichnis1/datei sowie /verzeichnis1), sollten spezifischere Pfade zuerst aufgeführt werden.
Mehr Informationen zu Redirect und anderen Direktiven von mod_alias finden Sie hier.
Weiterleitungen per RewriteRule
Das Modul mod_rewrite akzeptiert eine unbegrenzte Anzahl von Regeln (RewriteRule) und Regelbedingungen (RewriteCond), um zum Beispiel Weiterleitungen in Abhängigkeit von Server- oder Umgebungsvariablen, HTTP-Headern oder Zeitstempeln zu definieren. Die Direktive RewriteRule eignet sich auch für sehr komplexe Aufgabenstellungen. Der folgende Abschnitt kann nur eine kurze Einführung zum Modul geben. Weiterführende Informationen zum Funktionsumfang von mod_rewrite finden Sie hier und hier.
Bevor Sie das Modul in Ihrer .htaccess-Datei nutzen können, müssen Sie mod_rewrite mittels der Direktive „RewriteEngine“ aktivieren:
RewriteEngine on
Es kann zudem erforderlich sein, das Startverzeichnis für die Rewrite-Anweisungen anzugeben. Das erfolgt per „RewriteBase“, z. B.
RewriteBase /
RewriteBase /startverzeichnis
„RewriteRule“-Direktiven werden ebenfalls der Reihe nach abgearbeitet. RewriteRule erwartet einen regulären Ausdruck für die Ausgangs-URL, deren Ersetzung sowie optionale Flags zum Beispiel für den Statuscode des Redirects (R=301) oder das Stoppen des Rewrite-Prozesses („Last“/ L). Syntax:
RewriteRule Suchausdruck Ersetzung [flags]
Die Regel wird angewendet, wenn der vom Browser angeforderte URI (bzw. der Teil unterhalb des Startverzeichnisses) zum Suchausdruck passt und eventuelle Bedingungen, angegeben per „RewriteCond“, zutreffen. Auch RewriteCond kennt Flags, z. B. „nocase“ (NC) oder „ornext“ (OR) für logische ODER-Verknüpfung mit der nächsten Bedingung (Default ist UND). Hier ebenfalls einige Beispiele:
# Redirect mit Entfernung von www für alle Seiten von domain.tld
RewriteCond %{HTTP_HOST} ^www\.domain\.tld$ [NC]
RewriteRule ^(.*)$ domain.tld/$1 [L,R=301]
# Redirect auf www für alle Seiten von domain.tld außer robots.txt und sitemap.xml
RewriteCond %{REQUEST_URI} !^/(robots\.txt|sitemap\.xml)$
RewriteCond %{HTTP_HOST} ^www\.domain\.tld$ [NC]
RewriteRule ^(.*)$ www.domain.tld/$1 [R=301,L]
# Redirect von http auf https für alle Seiten, wenn Aufruf nicht auf Port 443 erfolgt
RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) %{HTTP_HOST}/$1 [R=301,L]
# Redirect aller Seiten – mit und ohne www – bei Umzug auf neue Domain
RewriteCond %{HTTP_HOST} ^domain\.tld$ [NC,OR]
RewriteCond %{HTTP_HOST} ^www.domain\.tld$ [NC]
RewriteRule ^(.*)$ www.neue-domain.tld/$1 [L,R=301]
Zum Abschluss noch ein Tipp: Wenn Sie nicht wissen, ob in der Installation Ihres Providers rewrite_mode (oder ein anderes benötigtes Modul) installiert bzw. geladen ist, können Sie das per <ifModule> prüfen und alle darauf bezogenen Anweisungen bedingt ausführen lassen:
<IfModule mod_rewrite.c>
.. Anweisungen
</IfModule>

Kommentare
Sven
am 29.11.2021Hallo ich hätte eine Frage, ich habe wie oben beschrieben Überladen Redirect 301 meine Unterseite umgeleitet, wenn ich aber die Hauptdomain umleiten will auf die neue. Ändert es mir die die komplette [...] Hallo ich hätte eine Frage, ich habe wie oben beschrieben Überladen Redirect 301 meine Unterseite umgeleitet, wenn ich aber die Hauptdomain umleiten will auf die neue. Ändert es mir die die komplette neue Domain alte url? Was mache ich da falsch?
Beispiel:
Redirect 301 /Bilder.html https://www.Neuedomain.de/Bilderhaus.hmt
……weiter
Redirect 301 / https://www.neuedomain.de/
Andreas
am 07.02.2021Sehr nützlicher Beitrag! Hat mir gerade beim Einrichten der Redirects sehr geholfen.
Merci. Sehr nützlicher Beitrag! Hat mir gerade beim Einrichten der Redirects sehr geholfen.
Merci.
Stefan
am 03.02.2020Super erklärt. Super erklärt.
Christopher Seidel
am 03.02.2020wirklich toller Artikel, sehr sehr ausführlich
eure Artikel lese ich immer gerne :-) wirklich toller Artikel, sehr sehr ausführlich
eure Artikel lese ich immer gerne :-)
Sascha
am 01.02.2020Sehr ausführlich, Danke! Wie ließen sich denn diese Direktiven auf NGNIX Webspaces umsetzen? Hab gehört, dort funktionieren htaccess Dateien gar nicht Sehr ausführlich, Danke! Wie ließen sich denn diese Direktiven auf NGNIX Webspaces umsetzen? Hab gehört, dort funktionieren htaccess Dateien gar nicht
Inga
am 04.02.2020Hallo Sascha,
das ist der Fall, wenn man statt Apache Nginx als Webserver nutzt. Bei Shared Hosting-Produkten von DomainFactory ist das aber nicht möglich.
In diesem Fall benötigt man andere [...] Hallo Sascha,
das ist der Fall, wenn man statt Apache Nginx als Webserver nutzt. Bei Shared Hosting-Produkten von DomainFactory ist das aber nicht möglich.
In diesem Fall benötigt man andere Direktiven. Das wäre evtl. ein Thema für einen eigenen Artikel, wir ziehen das gerne in Betracht.
Viele Grüße
Inga