Verzeichnisschutz mit .htaccess und .htpasswd einrichten
Manche Bereiche einer Website gehen die Öffentlichkeit nichts an: die Staging-Umgebung, der Entwurf für den Kunden, das Verzeichnis mit internen Downloads. Der klassische Weg, sie abzuschirmen, ist ein Verzeichnisschutz – ein Passwortschutz auf Server-Ebene, der seit Jahrzehnten funktioniert und in fünf Minuten eingerichtet ist. Wenn man die zwei, drei Fallen kennt.
Was ein Verzeichnisschutz ist – und warum er so wirksam ist
Ein Verzeichnisschutz nutzt HTTP Basic Authentication: Der Webserver selbst verlangt Benutzername und Passwort, bevor er irgendetwas aus dem geschützten Verzeichnis ausliefert. Der Browser zeigt dafür sein graues Login-Fenster – keine Schönheit, aber genau das ist der Punkt: Der Schutz greift vor jeder Anwendung.
Das macht ihn zu etwas Besonderem: Eine PHP-Anwendung mit Sicherheitslücke, ein vergessenes Admin-Skript, ein Formular mit Schwachstelle – hinter einem Verzeichnisschutz wird all das ohne Login gar nicht erst ausgeführt. Angriffe prallen am Server ab, bevor eine Zeile Anwendungscode läuft.
Wofür er sich eignet – und wofür nicht
Gut geeignet:
- Staging- und Entwicklungsumgebungen – der häufigste Fall. Nebenbei hält der Schutz auch Suchmaschinen fern, ohne dass ein vergessenes noindex später zur Falle wird.
- Kunden-Previews – ein Entwurf, den genau eine Handvoll Leute sehen soll.
- Interne Bereiche und Downloads – Dokumente, die nicht über einen erratbaren Link öffentlich sein dürfen.
- Als zweite Schicht vor Login-Seiten – ein Schutzwall vor dem eigentlichen Anwendungs-Login. Den WordPress-Spezialfall inklusive der WooCommerce-Fallen haben wir separat beschrieben: wp-admin mit Verzeichnisschutz absichern.
Nicht geeignet:
- Als Benutzerverwaltung. Es gibt keine Registrierung, kein Passwort-Zurücksetzen, keine Rollen – nur eine Textdatei mit Benutzern. Für echte Kundenbereiche ist das ein Fall für einen Anwendungs-Login.
- Als einziger Schutz sensibler Daten. Basic Auth ist eine solide Tür, aber kein Tresor – dazu unten mehr.
Die zwei Dateien dahinter
Der komplette Mechanismus besteht aus zwei kleinen Textdateien:
Die .htaccess liegt im zu schützenden Verzeichnis und enthält die Regel – vier Zeilen:
AuthType Basic– das Verfahren.AuthName "…"– der Text im Login-Fenster.AuthUserFile /absoluter/pfad/.htpasswd– wo die Zugangsdaten liegen. Die häufigste Fehlerquelle: Hier muss der absolute Pfad im Dateisystem des Servers stehen, nicht die URL.Require valid-user– jeder Benutzer aus der Datei darf hinein.
Die .htpasswd enthält die Zugangsdaten, eine Zeile pro Benutzer im Format name:hash. Das Passwort steht dort nie im Klartext, sondern als Hash – erzeugt normalerweise mit dem Kommandozeilen-Werkzeug htpasswd, das auf Shared Hosting aber selten verfügbar ist. Genau dafür ist der Generator hier:
Verzeichnisschutz-Generator
.htaccess & .htpasswd erzeugen
Benutzer anlegen, Dateien kopieren, fertig. Das Passwort wird lokal gehasht und verlässt deinen Browser nicht.
Den echten Pfad verrät dir dein Hosting-Panel – oder eine PHP-Datei mit <?php echo __DIR__;
Benutzername und Passwort verlassen den Browser nicht – der Hash (APR1-MD5, htpasswd-kompatibel) wird lokal per JavaScript erzeugt.
Schritt für Schritt einrichten
- Pfad herausfinden. Lege eine Datei
pfad.phpmit dem Inhalt<?php echo __DIR__;ins Zielverzeichnis und rufe sie im Browser auf – sie zeigt den absoluten Server-Pfad. Danach wieder löschen. .htpasswdablegen – mit den Benutzerzeilen aus dem Generator, idealerweise ein Verzeichnis oberhalb des öffentlichen Web-Roots. Dann ist sie über den Browser prinzipiell nicht erreichbar..htaccessergänzen – im zu schützenden Verzeichnis, mit dem echten Pfad beiAuthUserFile. Existiert dort schon eine.htaccess, die Zeilen oben ergänzen statt die Datei zu ersetzen.- Testen – am besten in einem privaten Browserfenster, damit keine gespeicherte Anmeldung das Ergebnis verfälscht.
- Fehlerfall: Kommt ein 500-Fehler, stimmt fast immer der
AuthUserFile-Pfad nicht. Erscheint gar kein Login-Fenster, wertet der Server die.htaccessnicht aus – auf Apache-Hosting selten, auf nginx die Regel (siehe unten).
Noch ein Stolperstein aus der Praxis: Beim Hochladen per FTP werden Dateien mit führendem Punkt oft ausgeblendet, und mancher Editor speichert heimlich htaccess.txt. Der Dateiname muss exakt .htaccess bzw. .htpasswd lauten.
Sicherheit ehrlich eingeordnet
Drei Dinge sollte man wissen, bevor man dem Schutz Geheimnisse anvertraut:
- HTTPS ist Pflicht. Basic Auth überträgt die Zugangsdaten bei jedem Request lediglich Base64-kodiert – ohne HTTPS liest sie jeder mit, der auf dem Weg lauscht. Da moderne Websites ohnehin über HTTPS laufen, ist das lösbar, aber es muss gesagt sein.
- Starke Passwörter sind der eigentliche Schutz. Ein Login-Fenster lässt sich automatisiert durchprobieren. Der Zufallsgenerator im Tool erzeugt Passwörter, bei denen das aussichtslos ist.
- Die
.htpasswdselbst schützen. Liegt sie im öffentlichen Web-Verzeichnis, blockiert Apache den Abruf von.ht*-Dateien zwar standardmäßig – sich darauf zu verlassen ist aber unnötig, wenn ein Verzeichnis außerhalb des Web-Roots genauso einfach ist.
Zum Hash-Verfahren: Der Generator erzeugt APR1-MD5 – das klassische htpasswd-Format, das auf praktisch jedem Apache- und LiteSpeed-Hosting funktioniert. Es ist nicht das modernste Verfahren (das wäre bcrypt), für den Zweck einer zusätzlichen Schutzschicht mit starkem Passwort aber völlig angemessen – und Kompatibilität schlägt hier Theorie: Ein Hash-Format, das dein Hosting nicht versteht, schützt gar nichts.
Und bei nginx?
nginx ignoriert .htaccess-Dateien vollständig – das Prinzip existiert dort trotzdem: Die Direktiven auth_basic und auth_basic_user_file leisten dasselbe, gehören aber in die Server-Konfiguration, an die man auf Shared Hosting meist nicht herankommt. Die gute Nachricht: Die Passwortdatei hat dasselbe Format, die Benutzerzeilen aus dem Generator funktionieren also auch dort. Auf nginx-Hosting führt der Weg über das Hosting-Panel oder den Support des Anbieters.
Ehrliches Fazit
Der Verzeichnisschutz ist eines der ältesten Werkzeuge des Webs – und eines der unterschätztesten: zwei Textdateien, kein Plugin, keine Abhängigkeit, und der Schutz greift, bevor irgendein Anwendungscode läuft. Er ersetzt keinen echten Anwendungs-Login und keinen sorgfältigen Umgang mit sensiblen Daten. Aber für Staging, Previews und interne Bereiche ist er genau das richtige Maß: schnell eingerichtet, robust, und seit Jahrzehnten bewährt.
Du willst deine Website nicht nur abschirmen, sondern dauerhaft sicher betreiben? Genau dafür gibt es unsere WordPress-Wartung – Updates, getestete Backups, Sicherheits-Monitoring. Oder schreib uns kurz, wenn du beim Einrichten Hilfe brauchst.
Häufige Fragen
Was ist ein Verzeichnisschutz?
Ein Passwortschutz auf Server-Ebene (HTTP Basic Authentication): Bevor der Server irgendetwas aus dem geschützten Verzeichnis ausliefert, verlangt der Browser Benutzername und Passwort. Er greift damit vor jeder Anwendung – auch PHP-Code, der Sicherheitslücken hätte, wird ohne Login gar nicht erst ausgeführt. Eingerichtet wird er über zwei Dateien: .htaccess (die Regel) und .htpasswd (die Zugangsdaten als Hash).
Ist ein Verzeichnisschutz per Basic Auth sicher?
Mit HTTPS: ja, als solide Schutzschicht. Ohne HTTPS: nein – Basic Auth überträgt die Zugangsdaten bei jedem Aufruf nur Base64-kodiert, also praktisch im Klartext. Da heute praktisch jede Website über HTTPS läuft, ist das in der Praxis selten ein Problem. Wichtig bleiben ein starkes Passwort (der Schutz lässt sich durchprobieren) und eine .htpasswd, die nicht öffentlich abrufbar ist.
Warum bekomme ich nach dem Einrichten einen 500-Fehler?
In fast allen Fällen stimmt der Pfad in AuthUserFile nicht: Er muss der absolute Server-Pfad zur .htpasswd sein – nicht die URL und nicht ein relativer Pfad. Findet Apache die Datei dort nicht, antwortet er mit einem 500er. Den echten Pfad verrät das Hosting-Panel oder eine kurze PHP-Datei mit echo __DIR__. Zweithäufigste Ursache: ein Tippfehler in einer der Direktiven.
Funktioniert der Verzeichnisschutz auch mit nginx?
Das Prinzip ja, die .htaccess nein: nginx ignoriert .htaccess-Dateien komplett. Dort gehören die Anweisungen (auth_basic und auth_basic_user_file) in die Server-Konfiguration, die auf Shared Hosting meist nur der Hoster ändern kann. Die Passwortdatei selbst hat dasselbe Format – die erzeugten Benutzerzeilen funktionieren also auch für nginx.
Passende Leistungen
Gründer & Full-Stack-Entwickler
20+ Jahre Erfahrung in der Webentwicklung. Spezialisiert auf Laravel, WordPress und individuelle Software für den Mittelstand.