FAQ zur Optimierung der .htaccess-Datei
Die .htaccess-Datei ist ein mächtiges Werkzeug in deiner WordPress-Installation. Mit ihr kannst du die Sicherheit erhöhen, die Performance verbessern und viele weitere wichtige Einstellungen vornehmen.
Inhaltsverzeichnis
Grundlegende Konfiguration
Standard WordPress .htaccess
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
RewriteEngine On: Aktiviert das Umschreiben von URLs.
RewriteBase /: Setzt den Basis-Pfad für alle nachfolgenden Regeln.
RewriteRule ^index.php$ – [L]: Wenn die Anfrage an index.php geht, tue nichts und beende die Verarbeitung dieser Regel.
RewriteCond %{REQUEST_FILENAME} !-f: Wenn die angeforderte Datei nicht existiert.
RewriteCond %{REQUEST_FILENAME} !-d: Wenn das angeforderte Verzeichnis nicht existiert.
RewriteRule . /index.php [L]: Leite alle anderen Anfragen an index.php weiter.
Sicherheitseinstellungen
Verzeichnisschutz
Order Allow,Deny
Deny from all
Order Allow,Deny
Deny from all
Schütze sensible Verzeichnisse vor unbefugtem Zugriff.
Schutz vor Directory Browsing
Options -Indexes
Deaktiviert die automatische Auflistung des Verzeichnisinhalts, wenn keine Index-Datei vorhanden ist.
Schutz vor schadhaften Abfragen
RewriteCond %{QUERY_STRING} (\|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (\|%3C) [NC,OR]
RewriteCond %{QUERY_STRING} (base64_encode)(.*) (\\|%3D)(.*) [NC,OR]
RewriteCond %{QUERY_STRING} (eval\() [NC,OR]
RewriteCond %{QUERY_STRING} (system\() [NC,OR]
RewriteCond %{QUERY_STRING} (passthru\() [NC,OR]
RewriteCond %{QUERY_STRING} (shell_exec\() [NC,OR]
RewriteCond %{QUERY_STRING} (phpinfo\() [NC,OR]
RewriteCond %{QUERY_STRING} (popen\() [NC,OR]
RewriteCond %{QUERY_STRING} (proc_open\() [NC]
RewriteRule ^(.*)$ - [F,L]
Schütze vor schadhaften Abfragen, die Sicherheitslücken ausnutzen wollen.
Verhindern von Code-Ausführung in Uploads-Verzeichnissen
Deny from all
Verhindere die Ausführung von PHP-Dateien im Uploads-Verzeichnis, um die Sicherheit zu erhöhen.
Performance-Optimierungen
Browser Caching
ExpiresActive On
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/pdf "access plus 1 month"
Nutze Browser Caching, um die Ladezeiten deiner Website zu verbessern.
GZIP-Komprimierung
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml
Aktiviere GZIP-Komprimierung, um die Größe deiner HTML, CSS und JS Dateien zu reduzieren.
Cache-Control Header
Header set Cache-Control "max-age=31536000, public"
Header set Cache-Control "max-age=31536000"
Header set Cache-Control "max-age=600"
Setze Cache-Control Header, um dem Browser mitzuteilen, wie lange er bestimmte Dateitypen cachen soll.
URL-Weiterleitungen
301 Weiterleitungen
Redirect 301 /alte-seite.html http://www.deineseite.de/neue-seite.html
Nutze 301-Weiterleitungen, um Besucher und Suchmaschinen auf eine neue URL zu leiten, wenn sich die Adresse deiner Seite geändert hat.
HTTPS erzwingen
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Erzwinge die Verwendung von HTTPS, um die Sicherheit deiner Website zu erhöhen.
Content Security Policy (CSP)
Header set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:"
Setze Content Security Policy Header, um die Sicherheit deiner Website zu verbessern und Angriffe zu verhindern.
Weitere nützliche Einstellungen
Hotlinking verhindern
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?deineseite\.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]
Verhindere, dass andere Websites deine Bilder direkt verlinken und damit deinen Server belasten.
XML-RPC deaktivieren
order deny,allow
deny from all
Deaktiviere XML-RPC, um Brute-Force-Angriffe zu verhindern.
Fehlermeldungen anpassen
ErrorDocument 404 /404.html
ErrorDocument 403 /403.html
ErrorDocument 500 /500.html
Passe die Fehlermeldungen an, die Besucher sehen, wenn sie auf eine Seite stoßen, die nicht existiert.
Zugriff auf bestimmte IPs beschränken
Order Deny,Allow
Deny from all
Allow from 123.456.789.000
Erlaube den Zugriff auf bestimmte Verzeichnisse nur von bestimmten IP-Adressen.
Beispiel einer gut ausgewogenen .htaccess Datei
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
Order Allow,Deny
Deny from all
Order Allow,Deny
Deny from all
Options -Indexes
RewriteCond %{QUERY_STRING} (\|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (\|%3C) [NC,OR]
RewriteCond %{QUERY_STRING} (base64_encode)(.*) (\\|%3D)(.*) [NC,OR]
RewriteCond %{QUERY_STRING} (eval\() [NC,OR]
RewriteCond %{QUERY_STRING} (system\() [NC,OR]
RewriteCond %{QUERY_STRING} (passthru\() [NC,OR]
RewriteCond %{QUERY_STRING} (shell_exec\() [NC,OR]
RewriteCond %{QUERY_STRING} (phpinfo\() [NC,OR]
RewriteCond %{QUERY_STRING} (popen\() [NC,OR]
RewriteCond %{QUERY_STRING} (proc_open\() [NC]
RewriteRule ^(.*)$ - [F,L]
Deny from all
ExpiresActive On
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript
Header set Cache-Control "max-age=31536000, public"
Header set Cache-Control "max-age=31536000"
Header set Cache-Control "max-age=600"
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Header set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:"
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\\.)?deineseite\\.com [NC]
RewriteRule \\.(jpg|jpeg|png|gif)$ - [NC,F,L]
order deny,allow
deny from all
ErrorDocument 404 /404.html
ErrorDocument 403 /403.html
ErrorDocument 500 /500.html
Order Deny,Allow
Deny from all
Allow from 123.456.789.000