Htaccess Tipps Tricks Anleitung
.htaccess Tipps & Tricks
Die .htaccess-Datei ist ein mächtiges Werkzeug zur Konfiguration von Apache-Webservern. Mit ihr können Sie Weiterleitungen einrichten, Caching optimieren, Zugriffe schützen und vieles mehr - ohne Zugriff auf die Server-Konfiguration.
Grundlagen
Die .htaccess-Datei:
- Liegt im Webroot oder in Unterverzeichnissen
- Wird bei jedem Request ausgelesen
- Einstellungen gelten für das Verzeichnis und alle Unterverzeichnisse
- Erfordert
AllowOverride Allin der Apache-Konfiguration
💡 Tipp: Erstellen Sie vor Änderungen immer ein Backup: cp .htaccess .htaccess.backup
Weiterleitungen (Redirects)
Einfache Weiterleitungen
# 301 Permanent Redirect (für SEO empfohlen)
Redirect 301 /alte-seite.html https://example.com/neue-seite.html
# 302 Temporary Redirect
Redirect 302 /temp-seite.html https://example.com/andere-seite.html
# Komplettes Verzeichnis weiterleiten
Redirect 301 /blog/ https://example.com/news/
Mit mod_rewrite
RewriteEngine On
# HTTP zu HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# www zu non-www
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
# non-www zu www
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
# Trailing Slash entfernen
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [R=301,L]
# Trailing Slash hinzufügen
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*[^/])$ /$1/ [R=301,L]
URL-Parameter weiterleiten
# Parameter an neue URL anhängen
RewriteRule ^produkt/(.*)$ /shop/item/$1 [R=301,L,QSA]
# Parameter entfernen
RewriteRule ^(.*)$ /$1? [R=301,L]
Sicherheit
Verzeichnisschutz mit Passwort
# .htaccess
AuthType Basic
AuthName "Geschützter Bereich"
AuthUserFile /pfad/zur/.htpasswd
Require valid-user
Passwort-Datei erstellen:
htpasswd -c /pfad/zur/.htpasswd benutzername
Dateien und Verzeichnisse schützen
# Zugriff auf bestimmte Dateien verweigern
<FilesMatch "\.(htaccess|htpasswd|ini|log|sh|sql)$">
Order Allow,Deny
Deny from all
</FilesMatch>
# wp-config.php schützen
<Files wp-config.php>
Order Allow,Deny
Deny from all
</Files>
# Verzeichnis-Listing deaktivieren
Options -Indexes
# Zugriff auf versteckte Dateien verweigern
<FilesMatch "^\.">
Order Allow,Deny
Deny from all
</FilesMatch>
IP-basierte Zugriffskontrolle
# Nur bestimmte IPs erlauben
Order Deny,Allow
Deny from all
Allow from 192.168.1.100
Allow from 10.0.0.0/24
# Bestimmte IPs blockieren
Order Allow,Deny
Allow from all
Deny from 123.456.789.0
# wp-admin nur für bestimmte IPs
<Files wp-login.php>
Order Deny,Allow
Deny from all
Allow from 192.168.1.100
</Files>
Security Headers
<IfModule mod_headers.c>
# XSS-Schutz
Header set X-XSS-Protection "1; mode=block"
# Clickjacking verhindern
Header set X-Frame-Options "SAMEORIGIN"
# MIME-Type Sniffing verhindern
Header set X-Content-Type-Options "nosniff"
# Referrer Policy
Header set Referrer-Policy "strict-origin-when-cross-origin"
# Content Security Policy (anpassen!)
Header set Content-Security-Policy "default-src 'self';"
# HSTS (Vorsicht - nicht ohne HTTPS!)
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</IfModule>
Caching & Performance
Browser-Caching aktivieren
<IfModule mod_expires.c>
ExpiresActive On
# Standardwert
ExpiresDefault "access plus 1 month"
# HTML
ExpiresByType text/html "access plus 0 seconds"
# CSS und JavaScript
ExpiresByType text/css "access plus 1 year"
ExpiresByType application/javascript "access plus 1 year"
# Bilder
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/webp "access plus 1 year"
ExpiresByType image/svg+xml "access plus 1 year"
ExpiresByType image/x-icon "access plus 1 year"
# Fonts
ExpiresByType font/woff2 "access plus 1 year"
ExpiresByType font/woff "access plus 1 year"
ExpiresByType font/ttf "access plus 1 year"
# PDF und andere
ExpiresByType application/pdf "access plus 1 month"
</IfModule>
GZIP-Komprimierung
<IfModule mod_deflate.c>
# Komprimierung aktivieren
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/json
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE image/svg+xml
# Browser-Bugs umgehen
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
</IfModule>
Fehlerseiten
# Eigene Fehlerseiten definieren
ErrorDocument 400 /fehler/400.html
ErrorDocument 401 /fehler/401.html
ErrorDocument 403 /fehler/403.html
ErrorDocument 404 /fehler/404.html
ErrorDocument 500 /fehler/500.html
ErrorDocument 503 /fehler/503.html
URL-Umschreibung
Schöne URLs (Pretty URLs)
RewriteEngine On
# example.com/produkt/123 → example.com/produkt.php?id=123
RewriteRule ^produkt/([0-9]+)/?$ produkt.php?id=$1 [L,QSA]
# example.com/kategorie/elektronik → example.com/kategorie.php?name=elektronik
RewriteRule ^kategorie/([a-zA-Z0-9-]+)/?$ kategorie.php?name=$1 [L,QSA]
# Dateiendung .php verstecken
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]
Häufige Probleme
| Problem | Lösung |
|---|---|
| 500 Internal Server Error | Syntax prüfen, mod_rewrite aktiviert? |
| Redirect-Schleife | RewriteCond hinzufügen um Endlos-Loops zu verhindern |
| Regeln werden ignoriert | AllowOverride All in Apache-Config prüfen |
| .htaccess nicht sichtbar | Versteckte Dateien im FTP-Client anzeigen |
⚠️ Wichtig: Bei Nginx funktioniert .htaccess nicht! Nginx verwendet eine eigene Konfigurationssyntax.
Weitere Hilfe
- 🔧 .htaccess Tester - Online-Tool zum Testen
- 📧 E-Mail: support@enjyn.de