.htaccess-Syntaxprüfung
Den Inhalt einer .htaccess-Datei einfügen, um sofort typische Fehler zu erkennen: nicht geschlossene Blockelemente, falsch geschriebene Direktivennamen, RewriteRule mit zu wenigen Argumenten und RewriteCond-Zeilen ohne zugehörige Regel.
Tipps
- Diese Prüfung ist eine heuristische, zeilenbasierte statische Analyse – kein echter Apache-Parser. Vor dem Deployment unbedingt auf einem echten Server oder in einer Staging-Umgebung testen.
- Mit Shell-Zugriff auf den Apache-Server ist
apachectl configtestdie zuverlässigste Syntaxprüfung überhaupt. Dieses Tool eignet sich für schnelle Vorabprüfungen, wenn dieser Befehl nicht verfügbar ist, etwa bei Shared Hosting. - Die Warnung „unbekannte Direktive" ist eine unsichere Vermutung anhand einer festen Positivliste. Wird eine Direktive aus einem selteneren Modul verwendet, bedeutet diese Warnung nicht zwingend einen Fehler.
- Mehrere aufeinanderfolgende RewriteCond-Zeilen sind normale Praxis (sie wirken wie UND-Bedingungen). Dieses Tool warnt nur, wenn auf die letzte RewriteCond einer Kette keine RewriteRule folgt.
- Vor dem Hochladen in die Produktivumgebung Änderungen schrittweise anwenden und jeden Schritt prüfen, statt die gesamte Datei auf einmal zu ersetzen.
Häufig gestellte Fragen
AllowOverride None gesetzt ist, wodurch .htaccess komplett ignoriert wird. Den Serveradministrator bitten zu bestätigen, dass AllowOverride All (oder zumindest die benötigten Kategorien wie AuthConfig oder FileInfo) aktiviert ist. Zusätzlich prüfen, ob ein Browser- oder CDN-Cache eine veraltete Antwort ausliefert.RewriteRule Muster Ersetzung [Flags]. Das Muster ist ein regulärer Ausdruck, der mit dem angeforderten URL-Pfad (ohne führenden Schrägstrich) verglichen wird. Die Ersetzung kann über $1, $2 usw. auf Klammerausdrücke im Muster verweisen. Flags stehen kommagetrennt in eckigen Klammern, etwa [L] (weitere Regeln nicht mehr verarbeiten) oder [R=301] (dauerhafte Weiterleitung).%{REQUEST_FILENAME} !-f voranzustellen (die Regel nur anwenden, wenn der Pfad noch keiner existierenden Datei entspricht), sodass die Regel nicht mehr greift, sobald das Ziel tatsächlich existiert.
Übrigens – Warum heißt es eigentlich „.htaccess"?
Der Name „.htaccess" ist die Kurzform von „hypertext access" und geht auf die frühen Versionen von NCSA httpd sowie Apache um 1995 zurück. Ursprünglich wurde er eingeführt, damit Verzeichnisbesitzer einen Passwortschutz (Basic-Authentifizierung) für ihren eigenen Bereich einrichten konnten, ohne die zentrale Serverkonfiguration (httpd.conf) anzufassen, die nur der Serveradministrator bearbeiten durfte.
Die Stärke von .htaccess liegt darin, dass Änderungen sofort wirksam werden, sobald die Datei per FTP oder Dateimanager hochgeladen wird – vorausgesetzt, der Apache-Administrator hat dies über die Direktive AllowOverride erlaubt. Ein Neustart des Servers ist dafür nicht nötig. So können Nutzer von Shared Hosting, die üblicherweise keinen Zugriff auf die Hauptkonfiguration haben, Weiterleitungen, Caching und Zugriffsbeschränkungen pro Verzeichnis steuern.
Diese Bequemlichkeit hat allerdings ihren Preis. Die offizielle Apache-Dokumentation empfiehlt ausdrücklich, Direktiven in der Hauptkonfiguration statt in .htaccess zu platzieren, sofern Zugriff darauf besteht. Der Grund ist einfach: Apache muss bei jeder Anfrage in jedem übergeordneten Verzeichnis erneut nach .htaccess-Dateien suchen und sie neu einlesen, was gegenüber der Hauptkonfiguration einen spürbaren Performance-Overhead verursacht.
Auch ein kleiner Syntaxfehler kann teuer werden: Auf vielen Shared-Hosting-Umgebungen führt eine ungültige .htaccess dazu, dass alle Seiten unterhalb dieses Verzeichnisses nur noch einen leeren „500 Internal Server Error" anzeigen, und die genaue Ursache zu finden kann viel Zeit kosten. Eine solche statische Prüfung zusätzlich zur sorgfältigen Durchsicht hilft, Flüchtigkeitsfehler vor einem Ausfall nach der Veröffentlichung abzufangen.