Ein Verzeichnisschutz per .htaccess und .htpasswd ist die einfachste Methode, einen Bereich auf dem Webserver mit Benutzername und Passwort abzusichern. Staging-Umgebungen, Admin-Bereiche, Kundenbereiche - vier Zeilen in der .htaccess reichen aus, um den Zugriff auf befugte Personen zu beschränken.
Du brauchst dafür zwei Dateien: die .htaccess (Konfiguration) im zu schützenden Verzeichnis und die .htpasswd (verschlüsselte Zugangsdaten) an einem sicheren Ort auf dem Server. Der Generator weiter unten erzeugt beide Dateien auf einen Klick.
htpasswd Generator
Gib Benutzername, Passwort und den Server-Pfad zur .htpasswd ein. Der Generator erzeugt den kompletten Code für beide Dateien - direkt zum Kopieren.
Server-Pfad herausfinden
Der häufigste Stolperstein beim Einrichten des Verzeichnisschutzes: Der Pfad zur .htpasswd in der .htaccess muss der absolute Server-Pfad sein, nicht die URL. Statt https://www.beispiel.de/.htpasswd brauchst du etwas wie /www/htdocs/w012345/.
So finden du den absoluten Pfad heraus:
Methode 1: PHP-Script
Erstelle eine Datei pfad.php mit diesem Inhalt, lade sie hoch und rufe sie im Browser auf:
<?php echo __DIR__; ?>
Die Ausgabe zeigt den absoluten Pfad des Verzeichnisses, z.B. /www/htdocs/w012345/meine-seite. Löschen du die Datei danach wieder.
Methode 2: Hosting-Panel
Die meisten Hoster zeigen den Server-Pfad im Kunden-Panel an. Bei All-Inkl. findest du ihn unter "Domains" > "bearbeiten", bei Strato unter "Hosting" > "Webspace-Verwaltung". Der Pfad beginnt je nach Hoster unterschiedlich:
| Hoster | Typischer Pfad |
|---|---|
| All-Inkl. | /www/htdocs/w012345/domain.de/ |
| Strato | /mnt/web123/a1234567/htdocs/ |
| IONOS | /kunden/homepages/12/d12345678/htdocs/ |
| Hetzner | /usr/home/hetzner/public_html/ |
| HostEurope | /is/htdocs/wp12345678_ABC123/www/ |
Methode 3: SSH
Wenn du SSH-Zugang hast, navigiere per cd zum gewünschten Verzeichnis und gib pwd ein. Die Ausgabe ist der absolute Pfad.
Schritt für Schritt: Verzeichnisschutz einrichten
So richten du den Passwortschutz ein - in drei Schritten:
Schritt 1: .htpasswd erstellen
Die .htpasswd enthält Benutzername und verschlüsseltes Passwort, getrennt durch einen Doppelpunkt. Du kannst den Generator oben verwenden, die Datei auf der Kommandozeile erzeugen oder sie manuell in einem Texteditor anlegen.
Variante A: Auf der Kommandozeile (SSH)
htpasswd -c /www/htdocs/w012345/.htpasswd admin
Das Programm fragt zweimal nach dem Passwort und schreibt den verschlüsselten Eintrag in die Datei. Der Schalter -c erstellt eine neue Datei. Für weitere Benutzer lass -c weg - sonst wird die bestehende Datei überschrieben.
Variante B: Manuell mit Texteditor (Notepad, VS Code)
Wenn du keinen SSH-Zugang hast, erstelle die .htpasswd als Textdatei auf deinem Computer. Öffne Notepad, VS Code oder einen anderen Texteditor und füge den vom Generator erzeugten Inhalt ein, z.B.:
admin:{SHA}W6ph5Mm5Pz8GgiULbPgzG37mj9g=
Beim Speichern gibt es unter Windows eine typische Falle: Der Editor hängt automatisch die Endung .txt an. Aus .htpasswd wird dann .htpasswd.txt - und das funktioniert nicht. So vermeiden du das:
In Notepad: Wähle "Speichern unter", setzen du den Dateityp auf "Alle Dateien (*.*)" und schreiben du den Dateinamen .htpasswd in Anführungszeichen: ".htpasswd". Die Anführungszeichen verhindern, dass Windows eine Endung anhängt.
In VS Code oder Notepad++: Speichere einfach über "Speichern unter" mit dem Namen .htpasswd. Diese Editoren fügen keine automatische Endung hinzu.
Variante C: Über das Hosting-Panel
Viele Hoster bieten im Kunden-Panel eine Funktion zum Einrichten eines Verzeichnisschutzes an. Bei All-Inkl. finden du diese unter "Tools" > "Verzeichnisschutz", bei Plesk unter "Passwortgeschützte Verzeichnisse". Diese Variante ist am einfachsten, weil der Hoster die Dateien automatisch am richtigen Ort anlegt.
Die .htpasswd per FTP hochladen
Nach dem Erstellen laden du die .htpasswd per FTP auf den Server. Dabei gibt es zwei Punkte zu beachten:
1. Versteckte Dateien sichtbar machen. Dateien, die mit einem Punkt beginnen (wie .htpasswd und .htaccess), sind auf dem Server als versteckte Dateien markiert. In den meisten FTP-Programmen werden sie standardmässig nicht angezeigt. In FileZilla aktivieren du die Anzeige unter Server > Versteckte Dateien anzeigen. In WinSCP finden du die Option unter Einstellungen > Oberfläche > Panels - eine ausführliche Anleitung dazu gibt es im Artikel WinSCP: Versteckte Dateien anzeigen.
2. Übertragungsmodus. Übertragen du die .htpasswd im ASCII-Modus (nicht binär). In FileZilla und WinSCP ist "Automatisch" die Standardeinstellung und funktioniert in der Regel korrekt.
/www/htdocs/w012345/domain.de/ liegt (das ist die DocumentRoot), legen du die .htpasswd eine Ebene höher ab: /www/htdocs/w012345/.htpasswd. So kann niemand die Datei per Browser aufrufen. Falls Dein Hoster keinen Zugriff auf Verzeichnisse oberhalb der DocumentRoot erlaubt, schützen du die Datei zusätzlich per .htaccess-Regel:
# .htpasswd vor Browser-Zugriff schützen
<Files ".htpasswd">
Require all denied
</Files>
Schritt 2: .htaccess anlegen
Legen du im zu schützenden Verzeichnis eine .htaccess mit diesen vier Zeilen an:
AuthType Basic
AuthName "Geschützter Bereich"
AuthUserFile /www/htdocs/w012345/.htpasswd
Require valid-user
Der AuthName erscheint im Login-Dialog des Browsers. Der AuthUserFile-Pfad muss der absolute Server-Pfad zur .htpasswd sein. Require valid-user bedeutet: Jeder Benutzer, der in der .htpasswd steht, darf zugreifen.
Schritt 3: Testen
Rufen du das geschützte Verzeichnis im Browser auf. Es sollte ein Login-Dialog erscheinen. Gib Benutzername und Passwort ein. Bei einer Fehlermeldung prüfen du den Pfad zur .htpasswd - das ist in 90% der Fälle die Ursache.
AuthType Basic vs. Digest
Apache bietet zwei Authentifizierungstypen: Basic und Digest. Die meisten Verzeichnisschutze verwenden Basic, weil es einfacher einzurichten ist und von allen Browsern unterstützt wird.
| Eigenschaft | AuthType Basic | AuthType Digest |
|---|---|---|
| Passwortübertragung | Klartext (Base64-kodiert) | Verschlüsselt (MD5-Hash) |
| Sicherheit ohne HTTPS | Unsicher - Passwort im Klartext abfangbar | Sicherer - Passwort wird nicht übertragen |
| Sicherheit mit HTTPS | Sicher - HTTPS verschlüsselt den gesamten Verkehr | Sicher |
| Einrichtung | Einfach (htpasswd) | Aufwändiger (htdigest, Realm nötig) |
| Browserunterstützung | Alle Browser | Alle modernen Browser |
In der Praxis ist AuthType Basic in Kombination mit HTTPS ausreichend sicher. Die Verbindung ist durch das TLS-Zertifikat verschlüsselt, sodass das Passwort nicht im Klartext über das Netz geht. AuthType Digest war vor der Verbreitung von HTTPS wichtiger - heute ist es in den meisten Fällen nicht mehr nötig.
Mehrere Benutzer und Gruppen
In einer .htpasswd können beliebig viele Benutzer stehen - jeder in einer eigenen Zeile:
admin:$apr1$9a0O8bnX$P1B0HXdmMPzPmQ98JDGlI.
redakteur:$apr1$hG7z2x$kLm9vBnQ8fR3eYtWp7xN1.
praktikant:$apr1$pQ4r1s$nKjH8mWx2dF6gVzRo5aL0.
Wenn du den Zugriff auf bestimmte Benutzer einschränken möchtest, ersetze Require valid-user durch Require user admin redakteur. Dann hat nur der dort genannte Benutzer Zugriff, nicht der Praktikant.
WordPress wp-admin absichern
Ein besonders häufiger Anwendungsfall: das WordPress-Backend per htpasswd schützen. Das stoppt Brute-Force-Angriffe auf die wp-login.php bereits auf Server-Ebene - bevor WordPress überhaupt geladen wird. Lege dafür eine .htaccess im /wp-admin/-Verzeichnis an oder schütze gezielt die Login-Datei:
# wp-login.php per htpasswd schützen
<Files wp-login.php>
AuthType Basic
AuthName "WordPress Login"
AuthUserFile /www/htdocs/w012345/.htpasswd
Require valid-user
</Files>
Diese Regel kommt in die .htaccess im WordPress-Hauptverzeichnis. Besucher sehen zuerst den htpasswd-Dialog und erst danach das WordPress-Login. Automatisierte Angriffe scheitern bereits an der ersten Hürde.
Häufige Fragen
Warum kommt ein Internal Server Error 500?
Fast immer liegt es am falschen Pfad zur .htpasswd. Der Pfad in der .htaccess muss der absolute Server-Pfad sein, nicht die URL. Prüfen du den Pfad mit einer kleinen PHP-Datei (<?php echo __DIR__; ?>) und vergleichen Sie.
Kann ich den Schutz für einzelne Dateien setzen?
Ja. Mit <Files dateiname.html> können du den Schutz auf eine einzelne Datei beschränken, statt das ganze Verzeichnis zu schützen. Das ist bei der WordPress-Login-Seite (wp-login.php) ein gängiges Muster.
Wie entferne ich den Passwortschutz wieder?
Lösche die vier AuthType-Zeilen aus der .htaccess (oder lösche die .htaccess, wenn sie nur den Passwortschutz enthält). Die .htpasswd kannst du ebenfalls löschen. Die Änderung ist sofort wirksam.
Funktioniert der Schutz auch auf Nginx?
Nicht über .htaccess. Nginx verwendet .htaccess-Dateien nicht. Den gleichen Schutz richten du dort in der Server-Konfiguration mit auth_basic und auth_basic_user_file ein. Das Passwort-Format der .htpasswd ist identisch.
Wird das Passwort gespeichert?
Der Browser speichert die Zugangsdaten für die aktuelle Sitzung. Nach dem Schliessen des Browsers müssen du dich erneut anmelden. Manche Browser bieten an, die Zugangsdaten im Passwort-Manager zu speichern - an öffentlichen Rechnern sollten du das ablehnen.
Verwandte Artikel
- .htaccess-Datei - Anleitung mit Beispielen für Apache
- wp-admin absichern
- Kommentar-Spam per .htaccess blockieren
- Bilder-Hotlinking verhindern
- Dateiendung in der URL entfernen