.htaccess-Weiterleitung: eine 301- oder 302-Weiterleitung in Apache schreiben
So schreiben Sie eine 301- oder 302-Weiterleitung in der .htaccess, welche Direktive Sie wählen (Redirect, RedirectMatch oder RewriteRule) und die häufigsten Fälle: Domainwechsel, HTTPS, Startseite, WordPress.
Mit der Datei .htaccess leiten Sie eine URL direkt auf einem Apache-Server weiter, ohne die Hauptkonfiguration anzufassen. Hier erfahren Sie, wie Sie darin eine 301- oder 302-Weiterleitung schreiben, welche Direktive Sie wählen (Redirect, RedirectMatch oder RewriteRule) und wie Sie die häufigsten Fälle lösen: Domainwechsel, HTTPS erzwingen, neue Startseite und WordPress.
Bevor Sie beginnen
Die .htaccess ist nicht der einzige mögliche Ort: Der vhost ist schneller, ein CMS-Plugin einfacher zu pflegen. Bei der Wahl hilft unser Artikel .htaccess, vhost oder Plugin: Wo legt man seinen Weiterleitungsplan ab?
Voraussetzungen: die Datei .htaccess und die Apache-Module
Die Datei liegt im Stammverzeichnis der Website (dem Ordner mit der Startseite) oder in einem Unterordner, um nur dort zu wirken. Sie ist versteckt: Blenden Sie versteckte Dateien in Ihrem FTP-Programm oder im Dateimanager Ihres Hosters ein. Gibt es sie nicht, legen Sie eine einfache Textdatei namens .htaccess an.
Zwei Apache-Module übernehmen die Arbeit:
- mod_alias mit den Direktiven
Redirect,RedirectPermanentundRedirectMatch; - mod_rewrite mit
RewriteEngine,RewriteCondundRewriteRulefür bedingte Fälle.
Damit Apache die Datei liest, muss die Serverkonfiguration diese Direktiven erlauben (AllowOverride All oder mindestens FileInfo). Bei AllowOverride None wird die Datei ignoriert. Beim Shared Hosting ist das fast immer schon freigegeben. Nginx kennt keine .htaccess: Dort gehört alles in den server-Block.
301 oder 302: dauerhaft oder vorübergehend?
Eine 301 bedeutet, dass die Seite dauerhaft umgezogen ist: Suchmaschinen wissen, dass sich die Adresse endgültig geändert hat, und Google überträgt ihren SEO-Wert und ihre Links auf das Ziel. Nutzen Sie sie für eine Migration, einen Domainwechsel oder eine umbenannte Seite.
Eine 302 bedeutet einen vorübergehenden Umzug: Die ursprüngliche Adresse bleibt indexiert, weil sie zurückkommen soll. Sie dient für Wartungsarbeiten, eine befristete Aktion oder einen Test. Eine 302, die monatelang bleibt, wird irgendwann wie eine 301 behandelt, aber es ist besser, von Anfang an eindeutig zu sein.
Redirect und RedirectPermanent: die einfache Weiterleitung
Um eine Seite auf eine andere zu leiten, reicht Redirect. Die Direktive erhält den Statuscode, den alten Pfad (ohne Domain) und die vollständige Zieladresse:
Redirect 301 /alte-seite.html https://www.meinewebsite.de/neue-seite/
RedirectPermanent /alter-ordner/ https://www.meinewebsite.de/neuer-ordner/
Redirect 302 /aktion https://www.meinewebsite.de/sale/RedirectPermanent ist eine Abkürzung für Redirect 301, RedirectTemp für Redirect 302. Achtung: Redirect wirkt auf ein Präfix. Die zweite Zeile leitet auch /alter-ordner/seite.html auf /neuer-ordner/seite.html weiter. Das ist praktisch für ein ganzes Verzeichnis, kann aber überraschen.
RedirectMatch: Weiterleitung mit einem regulären Ausdruck
RedirectMatch funktioniert wie Redirect, aber mit einem regulären Ausdruck. So behandeln Sie eine ganze Gruppe von Adressen in einer Zeile und verwenden die erfassten Teile mit $1, $2 usw. wieder:
# Alte .php-Seiten auf Adressen ohne Endung
RedirectMatch 301 ^/blog/(.*)\.php$ https://www.meinewebsite.de/blog/$1
# Genau eine URL (^ und $ verhindern den Präfix-Effekt)
RedirectMatch 301 ^/kontakt\.html$ https://www.meinewebsite.de/kontakt/RewriteRule und RewriteCond: fortgeschrittene Weiterleitungen
Dieses Modul ist das flexibelste: Jede Regel kann von Bedingungen zum Hostnamen, zum Protokoll, zu Parametern oder zu einer beliebigen Servervariable abhängen. Die Engine wird einmal ganz oben in der Datei aktiviert, mit RewriteEngine On.
RewriteEngine On
# Eine bestimmte Seite, Query-String wird verworfen
RewriteRule ^alte-seite/?$ https://www.meinewebsite.de/neue-seite/ [R=301,L,NC,QSD]
# Eine URL mit Parameter: /produkt.php?id=12
RewriteCond %{QUERY_STRING} ^id=12$
RewriteRule ^produkt\.php$ https://www.meinewebsite.de/produkte/stuhl/ [R=301,L,QSD]Die Flags in eckigen Klammern ändern das Verhalten:
R=301oderR=302: der zurückgegebene HTTP-Code (ohneRist es ein internes Rewrite, das der Besucher nicht sieht);L: letzte Regel, Apache hört hier auf;NC: ignoriert Groß- und Kleinschreibung;QSD: verwirft den ursprünglichen Query-String (Apache 2.4);QSAbehält ihn und hängt ihn an.
In der .htaccess beginnt das geprüfte Muster nicht mit einem Schrägstrich: Schreiben Sie ^alte-seite, nicht ^/alte-seite. Das ist der häufigste Fehler, wenn man ein Beispiel für einen vhost kopiert.
Welche Direktive verwenden?
| Bedarf | Direktive |
|---|---|
| Eine Seite auf eine andere | Redirect 301 |
| Ein ganzes Verzeichnis mit Unterseiten | Redirect 301 (Präfix-Effekt) |
| Eine Gruppe von Adressen nach Muster | RedirectMatch 301 |
| Nach Hostname, Protokoll oder Parameter | RewriteCond + RewriteRule |
| Ein CMS, das seine URLs schon umschreibt (WordPress, Shopware) | RewriteRule |
Mischen Sie die beiden Module nicht für dieselben Adressen: mod_rewrite läuft vor mod_alias, unabhängig von der Reihenfolge der Zeilen, was schwer vorhersehbare Ergebnisse liefert. Auf einer Website, die mod_rewrite schon nutzt, bleiben Sie bei einem Modul.
Eine ganze Domain mit der .htaccess weiterleiten
Bei einem Domainwechsel legen Sie dies auf der alten Website ab, unter der Zeile RewriteEngine On. Jede Adresse geht auf dieselbe Seite der neuen Domain, Pfad inklusive:
RewriteCond %{HTTP_HOST} ^(www\.)?alte-domain\.de$ [NC]
RewriteRule ^(.*)$ https://www.neue-domain.de/$1 [R=301,L]Diese Sammelregel reicht nur, wenn die Pfade gleich geblieben sind. Haben sich die URLs geändert, brauchen Sie einen Weiterleitungsplan Seite für Seite, der vor dieser allgemeinen Regel steht. Denken Sie auch daran, den alten Domainnamen zu verlängern: Ohne ihn funktioniert keine dieser Weiterleitungen mehr.
HTTPS (und www) in der .htaccess erzwingen
Um den gesamten HTTP-Traffic auf HTTPS und die Version ohne www auf die Version mit www zu leiten, in einem einzigen Schritt:
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.meinewebsite.de/$1 [R=301,L]Hinter einem Proxy oder CDN (Cloudflare, Load Balancer) ist %{HTTPS} immer off und die Regel läuft in einer Schleife: Prüfen Sie stattdessen den Header %{HTTP:X-Forwarded-Proto}.
Die Startseite mit der .htaccess ändern
Damit eine andere Datei als Startseite dient, brauchen Sie keine Weiterleitung, sondern die Direktive DirectoryIndex. Apache liefert die erste gefundene Datei der Liste aus, ohne die angezeigte Adresse zu ändern:
DirectoryIndex start.html index.php index.htmlMuss die Startseite wirklich umziehen (zum Beispiel / nach /de/), beschränken Sie die Weiterleitung auf das Stammverzeichnis, mit RedirectMatch 301 ^/$ https://www.meinewebsite.de/de/. Ohne ^/$ würde jede Seite auf dieses Ziel gehen.
301-Weiterleitung in der .htaccess von WordPress
WordPress schreibt seine eigenen Regeln zwischen die Zeilen # BEGIN WordPress und # END WordPress und schreibt sie bei jeder Änderung der Permalinks neu. Setzen Sie Ihre eigenen Zeilen immer über diesen Block: Darunter fängt WordPress die Anfrage vorher ab, und innerhalb des Blocks würden sie gelöscht. Ein Plugin im Admin-Menü ist ebenfalls möglich, lädt aber bei jedem Besuch PHP.
# SEO-Weiterleitungen
RewriteEngine On
RewriteRule ^alter-beitrag/?$ https://www.meinewebsite.de/neuer-beitrag/ [R=301,L]
# BEGIN WordPress
...
# END WordPressEine Weiterleitung aufheben, ohne die anderen Regeln zu löschen
- Erstellen Sie vor jeder Änderung eine Sicherungskopie der .htaccess.
- Öffnen Sie sie in einem Texteditor und suchen Sie die Zeile der Weiterleitung (Redirect, RedirectMatch oder RewriteRule, mit eventuellen RewriteCond-Zeilen direkt darüber).
- Löschen Sie diese Zeilen oder kommentieren Sie sie mit einem # am Zeilenanfang aus, um sie aufzubewahren.
- Speichern Sie die Datei und laden Sie sie wieder auf den Server.
- Testen Sie im privaten Fenster: Browser speichern eine 301 im Cache und können sie nach dem Löschen weiter anwenden.
Eine .htaccess-Weiterleitung testen
Am zuverlässigsten lesen Sie die HTTP-Header des Servers, ohne Browser-Cache. In der Kommandozeile muss curl -I https://www.meinewebsite.de/alte-seite/ den Status 301 und einen Location-Header mit der neuen URL zeigen. Prüfen Sie auch, dass es nur einen Sprung gibt: Eine Kette (HTTP auf HTTPS, dann auf www, dann auf die Zielseite) bremst Crawler und verwässert das Signal. Ein Fehler 500 direkt nach dem Speichern deutet auf einen Syntaxfehler hin: Spielen Sie die Sicherung zurück.
Für eine Migration mit mehreren hundert Seiten erzeugt Swan die Regeln für die .htaccess oder den vhost und testet automatisch jede alte Adresse.
Swan erstellt Ihren Weiterleitungsplan für die .htaccess oder den vhost und prüft jede URL.
Die Checkliste zur SEO-Migration als PDF. 20 Seiten Prüfpunkte zum Abhaken, von der Entscheidung zur Migration bis zur Kontrolle nach dem Livegang.