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

Fehler in einer .htaccess-Datei finden

Eine `.htaccess` ist eine Datei, in der ein einziges falsches Zeichen eine ganze Website mit einem 500er-Fehler zu Fall bringen kann. Fügen Sie den Inhalt ein, und dieses Werkzeug erkennt auf der Stelle die typischen Fehler: ein nicht geschlossenes Blockelement, einen falsch geschriebenen Direktivennamen, ein `RewriteRule` mit zu wenigen Argumenten, ein allein gelassenes `RewriteCond`.

**Geprüft wird hier die Syntax, nicht, ob die Datei das Gemeinte tut.** Eine Umschreibungsregel mag tadellos gebildet sein und dennoch niemanden zu der Adresse führen, die Ihnen vorschwebte, wenn die Bedingungen in falscher Reihenfolge stehen. Zwei Einzelheiten der Spezifikation sind darüber hinaus wissenswert. Die erste: **Ein `RewriteCond` gilt allein für das unmittelbar folgende `RewriteRule`**, sodass es schlicht nicht funktioniert, mehrere Bedingungen aufzuzählen und ans Ende eine einzige Regel zu setzen. Die zweite: **Ist `AllowOverride` in der Serverkonfiguration abgeschaltet, so wird die `.htaccess` überhaupt nie gelesen.** Geschieht trotz des Geschriebenen nichts, so verdächtigen Sie eher die Serverkonfiguration als die Datei.

So gehen Sie vor

  1. Fügen Sie den Inhalt Ihrer .htaccess ein Geben Sie die ganze Datei unverändert ein.
  2. Probieren Sie zuerst die Beispiele Ein gültiges Beispiel und eines mit Fehlern liegen bereit.
  3. Lesen Sie die benannten Zeilen **Nicht geschlossene Elemente und fehlende Argumente werden mit ihrer Zeilennummer gemeldet.**
  4. Prüfen Sie die Serverkonfiguration, wenn nichts wirkt **Ist `AllowOverride` abgeschaltet, wird die Datei nicht gelesen.**

Tipps für die Nutzung

  • 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 configtest die 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.

Wofür Sie es nutzen können

Um vor dem Livegang zu prüfen

**Ein Fehler in der `.htaccess` legt die ganze Website lahm, weshalb sich eine vorherige Prüfung reichlich lohnt.**

Um Umschreibungsregeln zu ergänzen

Nachdem Sie bestehenden Regeln eine Bedingung hinzugefügt haben, sehen Sie, ob die Form gehalten hat.

Um eine übernommene Konfiguration zu entziffern

In einer lange fortgeschriebenen Datei lässt sich feststellen, ob Teile davon längst wirkungslos sind.

Um einen 500er-Fehler einzugrenzen

**Sie können zuerst feststellen, ob die Syntax den Server am Starten hindert.**

Begriffe zur .htaccess

RewriteEngine
Die Direktive, die das Umschreiben einschaltet. **Steht sie nicht auf `On`, so wirkt keine der folgenden Regeln.**
RewriteCond
Eine Bedingung für eine Umschreibung. **Sie gilt allein für das unmittelbar folgende `RewriteRule`**, was im Sinn zu behalten ist.
RewriteRule
Die Umschreibungsregel selbst, die ein Muster, einen Ersatz und Schalter wie `[L,QSA]` aufnimmt.
Schalter
Die Angaben in eckigen Klammern hinter einer Regel. `L` hält die Verarbeitung hier an, `QSA` trägt die Abfragezeichenkette weiter.
Blockelement
Eine Umschließung wie `` oder ``. **Eines nicht zu schließen erzeugt einen 500er-Fehler.**
AllowOverride
Die serverseitige Einstellung, die bestimmt, welche Direktiven eine `.htaccess` verwenden darf. **Wo sie abgeschaltet ist, wird die Datei nicht gelesen.**

Häufig gestellte Fragen

Die häufigste Ursache ist, dass in der Apache-Hauptkonfiguration für dieses Verzeichnis 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.

Die Grundform lautet 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).

Eine sehr häufige Ursache ist, dass die umgeschriebene URL erneut auf das Muster derselben RewriteRule passt, sodass Apache sie immer wieder umschreibt. Die übliche Lösung ist, ein RewriteCond wie %{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.

Auf den meisten Shared-Hosting-Umgebungen liefern dann alle Seiten unterhalb dieses Verzeichnisses einen „500 Internal Server Error". Falls das Error-Log des Servers einsehbar ist, ist das der schnellste Weg, die genaue Zeile und Ursache zu finden.

Nein, das kann nicht garantiert werden. Dieses Tool führt eine heuristische, zeilenbasierte statische Prüfung durch und bildet das Verhalten des echten Apache-Parsers nicht vollständig ab. Ob das benötigte Modul (etwa mod_rewrite) geladen ist und ob eine Direktive im jeweiligen Kontext überhaupt erlaubt ist, hängt von der Serverumgebung ab – das Ergebnis daher stets in einer Staging-Umgebung oder auf dem echten Server verifizieren.
Tool-kun

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