08Website-Wissen & Fehlercodes
.htaccess-Grundlagen – Weiterleitungen, Schutz und Caching
Was die .htaccess-Datei kann und wie du bei Nexthosting https erzwingst, www umleitest, Ordner schützt und Caching einrichtest – mit fertigen Beispielen.
Kurz gesagt
Die .htaccess ist eine Textdatei im Ordner deiner Website, mit der du dem Apache-Webserver Regeln gibst: Weiterleitungen, Zugriffsschutz, Caching, eigene Fehlerseiten. Die Webhosting-Plattform von Nexthosting nutzt Apache, deshalb funktioniert sie. Ein Tippfehler kann die ganze Seite lahmlegen (Fehler 500). Mache immer erst eine Kopie.
Was ist die .htaccess?
Abschnitt betitelt „Was ist die .htaccess?“Der Name beginnt mit einem Punkt: Das ist eine „versteckte“ Datei. Sie liegt im Hauptverzeichnis deiner Website (dort, wo index.php liegt) und gilt für diesen Ordner und alle Unterordner. Zusätzliche .htaccess-Dateien in Unterordnern gelten für diesen Teil und überschreiben dort die darüberliegende.
- Anzeige: Aktiviere im SFTP-Programm („versteckte Dateien anzeigen“) oder im Dateimanager des Webpanels die Anzeige versteckter Dateien.
- Datei vorher sichern: Kopiere sie als
.htaccess-sicherung. - Bearbeiten: Reiner Texteditor, kein Textverarbeitungsprogramm. Speichere in UTF-8 ohne BOM.
Aufbau und Regeln
Abschnitt betitelt „Aufbau und Regeln“# Kommentar: beginnt mit einer RauteAnweisung Wert<IfModule mod_rewrite.c> RewriteEngine On</IfModule>- Eine Anweisung pro Zeile.
<IfModule …>führt Regeln nur aus, wenn das Modul vorhanden ist. Das verhindert 500er.- Die Reihenfolge zählt: Bei Weiterleitungen kommen spezielle Regeln vor allgemeinen.
- Bei WordPress steht der Block zwischen
# BEGIN WordPressund# END WordPress. Eigene Regeln stehen darüber oder darunter, nie in diesem Block, denn WordPress überschreibt ihn.
http auf https umleiten
Abschnitt betitelt „http auf https umleiten“Erst wenn dein Zertifikat aktiv ist (SSL-Zertifikate).
RewriteEngine OnRewriteCond %{HTTPS} !=onRewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]Läuft vor dem Server ein Vermittler (z. B. Cloudflare), kann %{HTTPS} immer „off“ sein, und es entsteht eine Schleife. Dann prüfst du den Header X-Forwarded-Proto:
RewriteCond %{HTTP:X-Forwarded-Proto} !httpsRewriteCond %{HTTPS} !=onRewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]www oder ohne www
Abschnitt betitelt „www oder ohne www“Wähle eine Hauptadresse.
RewriteEngine OnRewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]RewriteRule ^(.*)$ https://%1/$1 [L,R=301]RewriteEngine OnRewriteCond %{HTTP_HOST} !^www\. [NC]RewriteCond %{HTTP_HOST} ^(.+)$RewriteRule ^(.*)$ https://www.%1/$1 [L,R=301]Beide Varianten müssen im DNS auflösen (Domain mit Website verbinden) und im Zertifikat enthalten sein.
301-Weiterleitungen
Abschnitt betitelt „301-Weiterleitungen“Redirect 301 /alte-seite/ https://meinprojekt.de/neue-seite/RedirectMatch 301 ^/blog/(.*)$ https://meinprojekt.de/ratgeber/$1Mehr in Fehler 404 und Weiterleitungen.
Ordner schützen
Abschnitt betitelt „Ordner schützen“Passwortschutz
Abschnitt betitelt „Passwortschutz“AuthType BasicAuthName "Geschützter Bereich"AuthUserFile /pfad/zur/.htpasswdRequire valid-userDie Datei .htpasswd enthält verschlüsselte Passwörter und liegt außerhalb des öffentlichen Ordners. Den korrekten Pfad nennt dir das Webpanel oder du ermittelst ihn über SSH mit pwd. Bequemer ist der Passwortschutz im Webpanel, falls vorhanden.
Nur bestimmte Adressen erlauben
Abschnitt betitelt „Nur bestimmte Adressen erlauben“Require ip 203.0.113.10Ordnerinhalt nicht anzeigen
Abschnitt betitelt „Ordnerinhalt nicht anzeigen“Options -IndexesDateien sperren
Abschnitt betitelt „Dateien sperren“# Sensible Dateien sperren<FilesMatch "^(wp-config\.php|\.env|\.htaccess|readme\.html|license\.txt)$"> Require all denied</FilesMatch>
# Sicherungs- und Quelldateien sperren<FilesMatch "\.(bak|sql|log|ini|sh|inc|swp|dist)$"> Require all denied</FilesMatch>Sperre wp-config.php nicht, wenn WordPress sie nur intern einliest: Interne Zugriffe sind davon nicht betroffen, nur Aufrufe über den Browser.
Caching-Header (Browser-Cache)
Abschnitt betitelt „Caching-Header (Browser-Cache)“Mit diesen Regeln darf der Browser statische Dateien lange speichern. Das macht Seiten schneller (Website schneller machen, Cache verstehen).
<IfModule mod_expires.c> ExpiresActive On ExpiresByType image/webp "access plus 1 year" ExpiresByType image/avif "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/png "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 application/javascript "access plus 1 month" ExpiresByType text/html "access plus 0 seconds"</IfModule>
<IfModule mod_headers.c> <FilesMatch "\.(css|js|webp|avif|jpg|jpeg|png|svg|woff2)$"> Header set Cache-Control "public, max-age=31536000" </FilesMatch></IfModule>Wenn du eine Datei änderst, aber denselben Namen behältst, sehen Besucher bis zum Ablauf die alte Version. Hänge dann eine Versionsnummer an (style.css?v=2) oder benenne die Datei um.
Komprimierung (GZIP und Brotli)
Abschnitt betitelt „Komprimierung (GZIP und Brotli)“Komprimierte Dateien sind kleiner und laden schneller.
<IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml AddOutputFilterByType DEFLATE application/javascript application/json application/xml image/svg+xml</IfModule>Je nach Serverkonfiguration ist die Komprimierung (GZIP und teilweise Brotli) schon eingeschaltet. Prüfe zuerst:
curl -sI -H "Accept-Encoding: gzip, br" https://meinprojekt.de/ | grep -i content-encodingErscheint content-encoding: gzip oder br, musst du nichts tun. Brotli lässt sich nicht aus der .htaccess einschalten, wenn es der Server nicht anbietet.
Fehlerseiten
Abschnitt betitelt „Fehlerseiten“ErrorDocument 404 /404.htmlErrorDocument 403 /403.htmlErrorDocument 500 /fehler.htmlSicherheits-Header
Abschnitt betitelt „Sicherheits-Header“<IfModule mod_headers.c> Header always set X-Content-Type-Options "nosniff" Header always set X-Frame-Options "SAMEORIGIN" Header always set Referrer-Policy "strict-origin-when-cross-origin"</IfModule>Weiteres in Website-Sicherheit.
PHP-Werte: besser im Webpanel
Abschnitt betitelt „PHP-Werte: besser im Webpanel“Du kannst in einer .htaccess PHP-Werte setzen:
php_value upload_max_filesize 64MDas funktioniert nur, wenn PHP als Apache-Modul läuft. Bei den meisten modernen Hosting-Umgebungen läuft PHP als FPM, und dann erzeugen php_value- und php_flag-Zeilen einen 500-Fehler. Ändere PHP-Einstellungen deshalb im Webpanel: PHP-Einstellungen. Nur dort sind die Werte auch durch die Tarifgrenzen abgesichert.
Tipps zur Fehlersuche
Abschnitt betitelt „Tipps zur Fehlersuche“| Problem | Ursache | Lösung |
|---|---|---|
| 500 nach einer Änderung | Tippfehler oder unbekannte Anweisung | Letzte Zeile entfernen |
| Regel wirkt nicht | Falsche Reihenfolge, Browser-Cache bei 301 | Test mit curl, privates Fenster |
| Weiterleitungsschleife | https-Erkennung hinter Proxy |
X-Forwarded-Proto prüfen |
.htaccess verschwindet |
WordPress/Plugin überschreibt sie | Eigene Regeln außerhalb des WordPress-Blocks |
| Zugriff plötzlich 403 | Sperre in Datei oder darüberliegendem Ordner | Alle .htaccess im Pfad prüfen |
Häufige Fragen
Abschnitt betitelt „Häufige Fragen“Funktioniert die .htaccess bei Nexthosting?
Abschnitt betitelt „Funktioniert die .htaccess bei Nexthosting?“Ja. Die Webhosting-Plattform nutzt Apache, .htaccess wird ausgewertet.
Braucht jede Website eine .htaccess?
Abschnitt betitelt „Braucht jede Website eine .htaccess?“Nein. Ohne Datei läuft die Seite mit Standardverhalten. Bei WordPress entsteht sie beim Speichern der Permalinks.
Wo teste ich Regeln gefahrlos?
Abschnitt betitelt „Wo teste ich Regeln gefahrlos?“Auf der Vorschauadresse (<name>-<4 Zeichen>.staging.nexthosting.app) oder in einer Staging-Kopie (Staging und Klonen).