Zum Inhalt springen

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.

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.
# Kommentar: beginnt mit einer Raute
Anweisung 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 WordPress und # END WordPress. Eigene Regeln stehen darüber oder darunter, nie in diesem Block, denn WordPress überschreibt ihn.

Erst wenn dein Zertifikat aktiv ist (SSL-Zertifikate).

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ 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} !https
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Wähle eine Hauptadresse.

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [L,R=301]

Beide Varianten müssen im DNS auflösen (Domain mit Website verbinden) und im Zertifikat enthalten sein.

Redirect 301 /alte-seite/ https://meinprojekt.de/neue-seite/
RedirectMatch 301 ^/blog/(.*)$ https://meinprojekt.de/ratgeber/$1

Mehr in Fehler 404 und Weiterleitungen.

AuthType Basic
AuthName "Geschützter Bereich"
AuthUserFile /pfad/zur/.htpasswd
Require valid-user

Die 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.

Require ip 203.0.113.10
Options -Indexes
# 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.

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.

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:

Terminal-Fenster
curl -sI -H "Accept-Encoding: gzip, br" https://meinprojekt.de/ | grep -i content-encoding

Erscheint content-encoding: gzip oder br, musst du nichts tun. Brotli lässt sich nicht aus der .htaccess einschalten, wenn es der Server nicht anbietet.

ErrorDocument 404 /404.html
ErrorDocument 403 /403.html
ErrorDocument 500 /fehler.html
<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.

Du kannst in einer .htaccess PHP-Werte setzen:

php_value upload_max_filesize 64M

Das 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.

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

Ja. Die Webhosting-Plattform nutzt Apache, .htaccess wird ausgewertet.

Nein. Ohne Datei läuft die Seite mit Standardverhalten. Bei WordPress entsteht sie beim Speichern der Permalinks.

Auf der Vorschauadresse (<name>-<4 Zeichen>.staging.nexthosting.app) oder in einer Staging-Kopie (Staging und Klonen).