WordPress .htaccess: Standard-Code und sinnvolle Regeln
Die .htaccess sagt dem Webserver, wie er Ihre Website ausliefert. Hier finden Sie den Standard-Code von WordPress und fertige Regeln für Weiterleitung, Schutz und Tempo.
- Standard-Code zum KopierenDer Standard-Code von WordPress zum Kopieren
- Fertige RegelnFertige Regeln für HTTPS, Schutz und Caching
- Hilfe bei Fehler 500Was hilft, wenn danach Fehler 500 erscheint
- Ihre eigenen RegelnWeiterleitungen und Schutzregeln, oberhalb des WordPress-Blocks. bleibt
- Der WordPress-BlockZwischen # BEGIN WordPress und # END WordPress. WordPress schreibt ihn neu. nicht ändern
- Blöcke von PluginsCache- und Sicherheits-Plugins setzen eigene Markierungen und pflegen sie selbst. Plugin
- Caching und KompressionEigene Regeln für kürzere Ladezeiten, auch unterhalb des Blocks. bleibt
Was die .htaccess ist
Die .htaccess ist eine Textdatei mit Anweisungen für den Webserver. Er liest sie bei jedem Aufruf, noch bevor WordPress startet. WordPress braucht sie vor allem für sprechende Permalinks, also Adressen wie /kontakt/ statt /?p=12. Daneben steuern Sie damit Weiterleitungen, Zugriffsschutz und das Caching im Browser.
- Gilt für ihren Ordner und alle Unterordner
- Wirkt sofort, ohne Neustart
- Ein Tippfehler legt die ganze Website lahm
- ApacheLiest die .htaccess bei jedem Aufruf, ohne Neustart. ja
- LiteSpeedVersteht die .htaccess wie Apache. OpenLiteSpeed übernimmt nur einen Teil der Regeln. ja
- NginxKennt keine .htaccess. Regeln gehören in die Serverkonfiguration, die der Hoster pflegt. nein
- IIS (Windows)Nutzt statt der .htaccess die Datei web.config. web.config
Die Standard-.htaccess von WordPress
Diesen Block legt WordPress bei einer normalen Installation im Hauptverzeichnis an. Sie können ihn genau so übernehmen.
# BEGIN WordPress
# Die Direktiven (Zeilen) zwischen „BEGIN WordPress“ und „END WordPress“ sind
# dynamisch generiert und sollten nur über WordPress-Filter geändert werden.
# Alle Änderungen an den Direktiven zwischen diesen Markierungen werden überschrieben.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Die Regeln sind einfach: Gibt es die aufgerufene Datei oder den Ordner wirklich, liefert der Server sie direkt aus. Alles andere geht an index.php, und WordPress sucht die passende Seite.
Die Zeile mit HTTP_AUTHORIZATION reicht Anmeldedaten an WordPress weiter, etwa für Anwendungspasswörter. Die drei Kommentarzeilen schreibt WordPress in der Sprache der Website. In der offiziellen Dokumentation stehen dieselben Regeln ohne Kommentare und ohne IfModule. Beides funktioniert.
WordPress in einem Unterordner
Liegt WordPress etwa unter /blog/, ändern sich zwei Zeilen. Die Datei liegt dann in diesem Ordner.
RewriteBase /blog/
RewriteRule . /blog/index.php [L]
Wo die .htaccess liegt und warum Sie sie nicht sehen
Die Datei liegt im Hauptverzeichnis von WordPress. Dort finden Sie auch wp-config.php und die Ordner wp-admin, wp-content und wp-includes. Ihr Name beginnt mit einem Punkt. Solche Dateien gelten auf Linux-Servern als versteckt, und viele Programme blenden sie aus. Fehlt sie wirklich, hat das drei mögliche Gründe. Der Server ist Nginx, die Permalinks stehen auf „Einfach“, oder WordPress durfte sie nicht anlegen.
- FileZillaIm Menü Server den Punkt „Anzeige versteckter Dateien erzwingen“ wählen. FTP
- Dateimanager des HostersIn den Einstellungen des Dateimanagers versteckte Dateien einblenden. Hoster
- MacIm Finder mit Cmd + Shift + Punkt versteckte Dateien zeigen. lokal
- WindowsIm Editor beim Speichern „Alle Dateien“ wählen, sonst entsteht .htaccess.txt. lokal
Die .htaccess neu erzeugen
Ist die Datei beschädigt oder weg, legt WordPress sie selbst wieder an. Das dauert eine Minute.
-
1
Die alte Datei sichern
Laden Sie die vorhandene .htaccess per FTP herunter. Stehen darin eigene Regeln, brauchen Sie diese Kopie später.
-
2
Die Permalinks speichern
Öffnen Sie Einstellungen → Permalinks und klicken Sie unten auf „Änderungen speichern“. Ändern müssen Sie nichts. WordPress schreibt den Block dann neu.
Mit der Einstellung „Einfach“ braucht WordPress keine Regeln. Dann stehen im Block nur die Kommentare.
-
3
Keine Schreibrechte? Den Code von Hand eintragen
Kann WordPress die Datei nicht schreiben, zeigt es einen Fehler und darunter die passenden Regeln. Kopieren Sie sie in einen Texteditor, speichern Sie die Datei als .htaccess und laden Sie sie ins Hauptverzeichnis hoch.
-
4
Die Dateirechte prüfen
Üblich ist
644: Der Besitzer darf schreiben, alle anderen nur lesen. So kann WordPress den Block pflegen, und niemand sonst ändert ihn. -
5
Eigene Regeln zurückholen und testen
Fügen Sie Ihre eigenen Regeln aus der Sicherung wieder ein, außerhalb des WordPress-Blocks. Prüfen Sie Startseite, eine Unterseite und die Anmeldung in einem privaten Fenster.
Die .htaccess für Multisite
In einem Netzwerk schreibt WordPress die .htaccess nicht selbst. Sie tragen die Regeln von Hand ein.
WordPress zeigt den passenden Code bei der Einrichtung und später unter Netzwerkverwaltung → Einstellungen → Netzwerk-Einrichtung. Die Varianten unten stammen aus der offiziellen Dokumentation.
Netzwerk mit Unterverzeichnissen (beispiel.de/seite2/)
# BEGIN WordPress Multisite
# Using subfolder network type: https://wordpress.org/documentation/article/htaccess/#multisite
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]
# END WordPress Multisite
Netzwerk mit Subdomains (seite2.beispiel.de)
# BEGIN WordPress Multisite
# Using subdomain network type: https://wordpress.org/documentation/article/htaccess/#multisite
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]
RewriteRule . index.php [L]
# END WordPress Multisite
Netzwerke, die mit WordPress 3.4 oder älter eingerichtet wurden, brauchen eine ältere Variante mit einer Regel für ms-files.php. Sie steht ebenfalls in der Dokumentation.
Eigene Regeln richtig einfügen
Alles zwischen # BEGIN WordPress und # END WordPress kann WordPress jederzeit überschreiben. Schreiben Sie Ihre Regeln deshalb immer außerhalb. Weiterleitungen gehören über den Block. WordPress schickt alle Adressen an index.php, Regeln darunter greifen dann nicht mehr. Manche Anleitungen raten, das Überschreiben per Filter abzuschalten. Das brauchen Sie nicht, wenn Ihre Regeln außerhalb stehen.
- Vorher eine Kopie der Datei sichern
- Eine Änderung, dann im privaten Fenster testen
- Regeln in IfModule packen, falls ein Modul fehlt
- Blöcke von Plugins nicht anfassen
# Eigene Regeln: Weiterleitungen und Schutz
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^alte-seite/?$ /neue-seite/ [R=301,L]
</IfModule>
# BEGIN WordPress
# ... von WordPress erzeugt, nicht ändern ...
# END WordPress
# Eigene Regeln: Caching und Kompression
Weiterleitungen: HTTPS, www und einzelne Seiten
Alle Regeln gehören über den WordPress-Block. Testen Sie im privaten Fenster, denn Browser merken sich eine 301 oft dauerhaft.
-
1
HTTP auf HTTPS weiterleiten
Leitet jeden Aufruf ohne Verschlüsselung dauerhaft auf https um. Voraussetzung ist ein aktives SSL-Zertifikat beim Hoster.
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] </IfModule>Stellen Sie unter Einstellungen → Allgemein auch die WordPress-Adresse und die Website-Adresse auf https.
Hinter Cloudflare oder einem anderen Proxy meldet der Server oft immer „off“. Dann entsteht eine Endlosschleife. Viele Hoster bieten die Weiterleitung auch als Schalter im Kundenmenü an.
-
2
Mit oder ohne www vereinheitlichen
Diese Regeln erledigen HTTPS gleich mit. Nutzen Sie also entweder diese oder die Regel oben, nicht beide. Ersetzen Sie beispiel.de durch Ihre Domain.
Immer auf www
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} ^beispiel\.de$ [NC] RewriteRule ^(.*)$ https://www.beispiel.de/$1 [R=301,L] </IfModule>Immer ohne www
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} ^www\.beispiel\.de$ [NC] RewriteRule ^(.*)$ https://beispiel.de/$1 [R=301,L] </IfModule>Die Adresse unter Einstellungen → Allgemein muss zur Regel passen. Sonst leiten Server und WordPress sich gegenseitig um.
-
3
Einzelne Seiten per 301 umleiten
Der Pfad links steht ohne Domain und ohne ersten Schrägstrich. Das Ziel rechts darf auch eine vollständige Adresse sein.
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^alte-seite/?$ /neue-seite/ [R=301,L] RewriteRule ^leistungen/webdesign/?$ /webdesign/ [R=301,L] </IfModule>Die einfachere Schreibweise
Redirect 301 /alt/ https://www.beispiel.de/neu/leitet auch alle Adressen unterhalb von /alt/ um. Bei vielen Umleitungen ist ein Plugin wie Redirection übersichtlicher.
Mehr Sicherheit mit der .htaccess
Die Beispiele nutzen die Schreibweise von Apache 2.4. Anleitungen mit „Order deny,allow“ stammen aus der veralteten Version 2.2.
-
1
wp-config.php und andere sensible Dateien sperren
Die Regel stammt aus der offiziellen WordPress-Dokumentation. Sie sperrt die Zugangsdaten, die Serverdateien und das Fehlerprotokoll.
<FilesMatch "^(wp-config\.php|\.htaccess|\.htpasswd|debug\.log)$"> Require all denied </FilesMatch>Die Regel gilt auch für Unterordner, also etwa für wp-content/
debug.log. -
2
xmlrpc.php sperren
XML-RPC ist eine alte Schnittstelle und ein beliebtes Ziel für Passwort-Angriffe. Die meisten Websites brauchen sie nicht.
<Files xmlrpc.php> Require all denied </Files>Jetpack und einige Apps oder externe Dienste nutzen die Schnittstelle noch. Prüfen Sie danach, ob diese weiter funktionieren.
-
3
Das Verzeichnislisting ausschalten
Ohne diese Zeile zeigt der Server bei manchen Ordnern eine Liste aller Dateien an. Viele Hoster haben das bereits abgeschaltet.
Options -IndexesErlaubt der Hoster die Anweisung Options nicht, folgt ein Fehler 500. Entfernen Sie die Zeile dann wieder.
-
4
PHP im Upload-Ordner verbieten
Legen Sie im Ordner
wp-content/eine eigene .htaccess mit diesem Inhalt an. Dort gehören nur Bilder und Dokumente hin, keine Programme.uploads <FilesMatch "\.(php|php[0-9]|phtml|phar)$"> Require all denied </FilesMatch>Eingeschleuste PHP-Dateien im Upload-Ordner sind ein typisches Zeichen eines Angriffs. Finden Sie dort welche, lesen Sie zuerst WordPress gehackt.
Browser-Caching und Kompression
Cache-Plugins wie WP Rocket oder LiteSpeed Cache schreiben solche Regeln oft selbst. Prüfen Sie das vorher, doppelte Regeln bringen nichts.
-
1
Browser-Caching einschalten
Der Browser speichert Bilder, Schriften, CSS und JavaScript und lädt sie beim nächsten Besuch nicht neu. Das Modul mod_expires setzt dafür die Laufzeit.
<IfModule mod_expires.c> ExpiresActive On ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/png "access plus 1 year" ExpiresByType image/webp "access plus 1 year" ExpiresByType image/avif "access plus 1 year" ExpiresByType image/svg+xml "access plus 1 year" ExpiresByType font/woff2 "access plus 1 year" ExpiresByType text/css "access plus 1 month" ExpiresByType text/javascript "access plus 1 month" ExpiresByType application/javascript "access plus 1 month" </IfModule>Nach Updates von Plugins und Themes ändert sich meist die Versionsnummer in der Adresse der Datei. Bearbeiten Sie eine Datei von Hand, sehen wiederkehrende Besucher die Änderung womöglich erst nach Ablauf der Frist.
-
2
Kompression einschalten
Das Modul mod_deflate schickt Texte gepackt. HTML, CSS und JavaScript werden dadurch deutlich kleiner.
<IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml AddOutputFilterByType DEFLATE text/javascript application/javascript AddOutputFilterByType DEFLATE application/json application/xml image/svg+xml </IfModule>Ob sie schon wirkt, zeigen die Entwicklertools des Browsers. Steht bei einer Datei content-encoding gzip oder br, ist sie aktiv.
Oft empfohlen, aber mit Vorsicht
Diese Regeln finden Sie in vielen Anleitungen. Sie können sinnvoll sein, haben aber Nebenwirkungen.
Upload-Limit per php_value
Zeilen wie php_value upload_max_filesize funktionieren nur, wenn PHP als Apache-Modul läuft. Bei den meisten Hostern führen sie zum Fehler 500.
Passwortschutz für wp-login.php
Eine zweite Anmeldung per .htpasswd hält viele Angriffe ab. In Shops mit Kundenkonten stört sie aber die Kunden. Der Pfad zur .htpasswd muss absolut sein.
IP-Sperre für wp-admin
Geht nur mit fester IP-Adresse. Außerdem liegt dort admin-ajax.php, das viele Formulare und Plugins im Frontend brauchen. Sperren Sie es nicht mit.
Hotlinking verhindern
Spart Datenvolumen, wenn fremde Seiten Ihre Bilder einbinden. Dabei fehlen oft auch Vorschaubilder in Feeds und sozialen Netzwerken.
Sicherheits-Header
Header wie X-Content-Type-Options sind sinnvoll. Eine Content-Security-Policy kann aber Skripte blockieren. Testen Sie sie zuerst auf einer Kopie.
Was ist ein Staging?Autoren-Abfrage sperren
Die Sperre von ?author=1 verbirgt Benutzernamen nur zum Teil. Sicherer sind starke Passwörter und eine Zwei-Faktor-Anmeldung.
500 Internal Server Error nach einer Änderung
Die Website zeigt nur noch „Internal Server Error“? Dann versteht der Server eine Zeile in der .htaccess nicht. So kommen Sie zurück.
-
1
Die letzte Änderung zurücknehmen
Ein Fehler 500 sperrt meist auch den Adminbereich. Öffnen Sie die .htaccess deshalb per FTP oder im Dateimanager des Hosters. Laden Sie Ihre Sicherung hoch oder entfernen Sie die neuen Zeilen.
-
2
Keine Sicherung? Die Datei umbenennen
Benennen Sie die Datei in
.htaccess-defektum. Die Startseite lädt dann meist wieder, Unterseiten zeigen vorerst „nicht gefunden“. Speichern Sie danach die Permalinks, und WordPress legt eine neue Datei an. -
3
Im Fehlerprotokoll die Ursache suchen
Das Fehlerprotokoll des Hosters nennt die Zeile. „Invalid command“ heißt: Das nötige Modul fehlt. „not allowed here“ heißt: Der Hoster erlaubt diese Anweisung nicht.
-
4
Eigene Regeln einzeln wieder einfügen
Fügen Sie eine Regel nach der anderen ein und testen Sie nach jeder. So finden Sie genau die Zeile, die den Fehler auslöst.
Alle Unterseiten zeigen 404
Der WordPress-Block fehlt oder ist beschädigt. Speichern Sie die Permalinks erneut.
„Zu oft weitergeleitet“
Eine Weiterleitung passt nicht zur Adresse in WordPress oder zum Proxy. Prüfen Sie die HTTPS- und www-Regeln.
403 bei Bildern oder Formularen
Eine Sperrregel greift zu weit, oft die im Upload-Ordner. Nehmen Sie sie testweise heraus.
Besucher landen auf fremden Seiten
Oft nur von Google oder vom Handy aus. Dann hat meist Schadcode Regeln in die .htaccess geschrieben.
WordPress gehackt: was jetztIst Ihre Website nach einer Änderung an der .htaccess nicht mehr erreichbar, bringen wir sie zurück. Wir sichern zuerst den aktuellen Stand und setzen die Regeln sauber neu.
Finden Sie Regeln, die niemand von Ihnen eingetragen hat, deutet das auf einen Angriff. Dann gilt eine andere Reihenfolge: WordPress gehackt.
Fragen zur WordPress .htaccess
Wo finde ich die .htaccess in WordPress?
Im Hauptverzeichnis der Installation. Dort, wo auch wp-config.php liegt. Sie ist versteckt, weil ihr Name mit einem Punkt beginnt. Blenden Sie versteckte Dateien im FTP-Programm ein.
Brauche ich eine .htaccess, wenn mein Hoster Nginx nutzt?
Nein, Nginx liest sie nicht. Weiterleitungen und Schutzregeln trägt dort der Hoster in die Serverkonfiguration ein. Manche Hoster setzen Nginx vor Apache, dann gilt die .htaccess trotzdem.
Wird meine .htaccess bei Updates überschrieben?
Nur der WordPress-Block. WordPress schreibt ihn neu, wenn Sie die Permalinks speichern oder ein Plugin die Regeln erneuert. Alles außerhalb der Markierungen bleibt erhalten.
Welche Dateirechte braucht die .htaccess?
Üblich ist 644. So darf der Besitzer schreiben und der Server lesen. Stellen Sie die Datei auf 444, kann WordPress den Block nicht mehr pflegen.
Kann ich die .htaccess mit einem Plugin bearbeiten?
Ja, aber mit Vorsicht. Manche SEO- und Sicherheits-Plugins haben einen Editor dafür. Führt eine Änderung zu Fehler 500, ist auch das Plugin nicht mehr erreichbar. Halten Sie FTP-Zugang bereit.