Viele Poster haben Probleme beim Debuggen ihrer RewriteRule- und RewriteCond-Anweisungen in ihren .htaccess
Dateien. Die meisten von ihnen verwenden einen gemeinsam genutzten Hosting-Dienst und haben daher keinen Zugriff auf die Root-Server-Konfiguration. Sie können die Verwendung von .htaccess
Dateien zum Umschreiben nicht vermeiden und können ein RewriteLogLevel nicht aktivieren ", wie viele Befragte vorschlagen. Außerdem gibt es viele .htaccess
spezifische Fallstricke und Einschränkungen, die nicht gut abgedeckt sind. Das Einrichten eines lokalen Test-LAMP-Stapels erfordert für die meisten zu viel Lernaufwand .
Meine Frage hier ist also, wie wir empfehlen würden, dass sie ihre Regeln selbst debuggen . Ich gebe unten einige Vorschläge. Andere Vorschläge wären willkommen.
Verstehen Sie, dass die mod_rewrite-Engine
.htaccess
Dateien durchläuft . Der Motor führt diese Schleife aus:do execute server and vhost rewrites (in the Apache Virtual Host Config) find the lowest "Per Dir" .htaccess file on the file path with rewrites enabled if found(.htaccess) execute .htaccess rewrites (in the user's directory) while rewrite occurred
Ihre Regeln werden also wiederholt ausgeführt. Wenn Sie den URI-Pfad ändern, werden möglicherweise andere
.htaccess
Dateien ausgeführt, sofern diese vorhanden sind. Stellen Sie daher sicher, dass Sie diese Schleife beenden, falls erforderlich, indem Sie zusätzliche hinzufügen, um das AuslösenRewriteCond
von Regeln zu stoppen. Löschen Sie auch alle.htaccess
Regelsätze zum Umschreiben auf niedrigerer Ebene, es sei denn, Sie möchten ausdrücklich mehrstufige Regelsätze verwenden.Stellen Sie sicher, dass die Syntax jedes Regexp korrekt ist, indem Sie anhand einer Reihe von Testmustern testen, ob diese eine gültige Syntax ist und mit einer Reihe von Test-URIs das tut, was Sie beabsichtigen. Siehe Antwort unten für weitere Details.
Erstellen Sie Ihre Regeln schrittweise in einem Testverzeichnis. Sie können die Funktion "Die tiefste
.htaccess
Datei auf dem Pfad ausführen " verwenden, um hier ein separates Testverzeichnis (Baum) einzurichten und Regelsätze zu debuggen, ohne Ihre Hauptregeln zu vermasseln und die Arbeit Ihrer Site zu stoppen. Sie müssen sie einzeln hinzufügen, da dies die einzige Möglichkeit ist, Fehler in einzelnen Regeln zu lokalisieren.Verwenden Sie einen Dummy-Skript-Stub, um Server- und Umgebungsvariablen auszugeben . (Siehe Listing 2 ) Wenn Ihre App beispielsweise verwendet,
blog/index.php
können Sie diese kopierentest/blog/index.php
und zum Testen Ihrer Blog-Regeln imtest
Unterverzeichnis verwenden. Sie können auch Umgebungsvariablen verwenden, um sicherzustellen, dass die Rewrite-Engine die Substitutionszeichenfolgen korrekt interpretiert, zRewriteRule ^(.*) - [E=TEST0:%{DOCUMENT_ROOT}/blog/html_cache/$1.html]
und suchen Sie nach diesen REDIRECT_ * -Variablen im phpinfo-Dump. Übrigens habe ich dieses verwendet und auf meiner Website festgestellt, dass ich es
%{ENV:DOCUMENT_ROOT_REAL}
stattdessen verwenden musste. Im Fall einer Redirector-Schleife listen die Variablen REDIRECT_REDIRECT_ * den vorherigen Durchgang auf. Etc..Stellen Sie sicher, dass Sie nicht von Ihrem Browser gebissen werden, der falsche 301-Weiterleitungen zwischenspeichert . Siehe Antwort unten . Mein Dank geht an Ulrich Palha dafür.
Die Rewrite-Engine scheint empfindlich auf kaskadierte Regeln innerhalb eines
.htaccess
Kontexts zu reagieren (hierRewriteRule
führt dies zu einer Substitution und dies fällt jedoch auf weitere Regeln), da ich Fehler mit internen Unteranforderungen (1) und eine falsche PATH_INFO- Verarbeitung gefunden habe, die häufig auftreten kann wird durch Verwendung der Flags [NS], [L] und [PT] verhindert.
Noch mehr Kommentare oder Vorschläge?
Listing 1 - phpinfo
<?php phpinfo(INFO_ENVIRONMENT|INFO_VARIABLES);