it-swarm.dev

Wie debuggen .htaccess RewriteRule funktioniert nicht

Ich habe eine RewriteRule in einer .htaccess-Datei, die nichts tut. Wie kann ich das beheben?

  • Wie kann ich überprüfen, ob die .htaccess-Datei überhaupt von Apache gelesen und befolgt wird? Kann ich eine Echo-Meldung "es funktioniert" schreiben, wenn ich sie schreibe, wo würde diese Zeile ausgegeben werden?
  • Wenn die .htaccess-Datei nicht verwendet wird, wie kann ich Apache dazu bringen, sie zu verwenden?
  • Wenn der .htaccess verwendet wird, aber meine RewriteRule immer noch keine Auswirkung hat, was kann ich dann zum Debuggen tun?
111
macha

Geben Sie einen Junkwert in Ihren .htaccess .__ ein, z. foo bar, sakjnaskljdnas ein beliebiges Schlüsselwort, das von htaccess nicht erkannt wird, und besuchen Sie Ihre URL. Wenn es funktioniert, sollten Sie eine bekommen 

500 Interner Serverfehler

Interner Serverfehler

Der Server hat einen internen Fehler oder eine falsche Konfiguration festgestellt und konnte Ihre Anfrage nicht abschließen.

Ich schlage vor, es bald nach RewriteEngine on zu setzen.


Da bist du auf deiner Maschine. Ich gehe davon aus, dass Sie Zugriff auf die Apache .conf-Datei haben.

Öffnen Sie die Datei .conf und suchen Sie nach einer Zeile, die der folgenden ähnelt:

LoadModule rewrite_module modules/mod_rewrite.so

Wenn es kommentiert ist (#), entfernen Sie das Kommentarzeichen und starten Sie Apache erneut.


Um das Umschreiben zu protokollieren

RewriteEngine On
RewriteLog "/path/to/rewrite.log"
RewriteLogLevel 9

Fügen Sie die obigen 3 Zeilen in Ihre virtualhost ein. Starten Sie das httpd neu. 

RewriteLogLevel 9 Die Verwendung eines hohen Werts für Level verlangsamt Ihren Apache-Server erheblich! Verwenden Sie die Umschreibungsprotokolldatei mit einer höheren Stufe als 2 nur zum Debuggen! Level 9 protokolliert fast jedes Detail eines Rewritelog.


AKTUALISIEREN

Dinge haben sich in Apache 2.4 geändert:

FROM Upgrade auf 2.4 von 2.2

Die Direktiven RewriteLog und RewriteLogLevel wurden entfernt. Diese Funktionalität wird jetzt durch Konfigurieren der entsprechenden Protokollierungsstufe für das Modul mod_rewrite mithilfe der Direktive LogLevel bereitgestellt. Siehe auch den Abschnitt mod_rewrite-Protokollierung.

Weitere Informationen zu LogLevel finden Sie unter LogLevel-Direktive

du kannst es schaffen

RewriteLog "/path/to/rewrite.log"

auf diese Weise jetzt

LogLevel debug rewrite_module:debug
140
ThinkingMonkey

Die Antwort "Geben Sie einen Junk-Wert ein" kam für mich nicht aus, meine Website wurde trotz des eingegebenen Junk weiterhin geladen.

Stattdessen fügte ich die folgende Zeile oben in der .htaccess-Datei hinzu:

deny from all

So können Sie schnell wissen, ob .htaccess abgeholt wird oder nicht. Wenn der .htaccess verwendet wird, werden die Dateien in diesem Ordner überhaupt nicht geladen.

45
caitriona

Im Allgemeinen sollte jede Änderung des .htaccess sichtbare Auswirkungen haben. Wenn dies nicht der Fall ist, überprüfen Sie Ihre Konfigurations-Apache-Dateien.

<Directory ..>
    ...
    AllowOverride None
    ...
</Directory>

Sollte in geändert werden 

AllowOverride All

Und Sie können Anweisungen in .htaccess-Dateien ändern.

32
jgpATs2w

Eine logischere Methode wäre vielleicht, eine Datei zu erstellen (z. B. test.html), etwas Inhalt hinzuzufügen und dann zu versuchen, sie als Indexseite festzulegen:

DirectoryIndex test.html

Meistens überschreibt die .htaccess-Regel die Apache-Konfiguration, wenn auf Verzeichnis-/Dateiebene gearbeitet wird

5
Cez

Wenn Sie Zugriff auf das Apache-Bin-Verzeichnis haben, können Sie Folgendes verwenden:

httpd -M, um die geladenen Module zuerst zu überprüfen.

 info_module (shared)
 isapi_module (shared)
 log_config_module (shared)
 cache_disk_module (shared)
 mime_module (shared)
 negotiation_module (shared)
 proxy_module (shared)
 proxy_ajp_module (shared)
 rewrite_module (shared)
 setenvif_module (shared)
 socache_shmcb_module (shared)
 ssl_module (shared)
 status_module (shared)
 version_module (shared)
 php5_module (shared)

Danach wird durch einfache Anweisungen wie Options -Indexes oder deny from all sichergestellt, dass .htaccess ordnungsgemäß funktioniert.

3
Abhishek Gurjar

Um die erste Frage der drei gestellten Fragen zu beantworten, können Sie auf einfache Weise feststellen, ob die .htaccess-Datei funktioniert oder nicht, einen benutzerdefinierten Fehler oben in der .htaccess-Datei auslösen:

ErrorDocument 200 "Hello. This is your .htaccess file talking."
RewriteRule ^ - [L,R=200]

Zu Ihrer zweiten Frage: Wenn die .htaccess-Datei nicht gelesen wird, hat die Haupt-Apache-Konfiguration des Servers möglicherweise AllowOverride auf None gesetzt. Die Dokumentation von Apache enthält Tipps zur Fehlerbehebung für diesen und andere Fälle, in denen der .htaccess möglicherweise nicht wirksam wird.

Um Ihre dritte Frage zu beantworten, müssen Sie schließlich auf ein bestimmtes variables debuggen, auf das Sie in Ihrer Umschreibungsregel verweisen oder ein Ausdruck verwenden, das Sie unabhängig von der Regel auswerten möchten Mach Folgendes:

Geben Sie das variable aus, auf das Sie verweisen, um sicherzustellen, dass es den Wert hat, den Sie erwarten:

ErrorDocument 200 "Request: %{THE_REQUEST} Referrer: %{HTTP_REFERER} Host: %{HTTP_Host}"
RewriteRule ^ - [L,R=200]

Testen Sie den Ausdruck unabhängig, indem Sie ihn in eine <If>-Direktive einfügen. Auf diese Weise können Sie sicherstellen, dass Ihr Ausdruck richtig geschrieben ist oder übereinstimmt, wenn Sie davon ausgehen, dass er Folgendes erwartet:

<If "%{REQUEST_URI} =~ /Word$/">
    ErrorDocument 200 "Your expression is priceless!"
    RewriteRule ^ - [L,R=200]
</If>

Viel Spaß beim Debuggen!

2
PeterA

Um Ihre htaccess-Umschreibregeln zu testen, geben Sie einfach die URL ein, auf die Sie die Regeln anwenden, platzieren Sie den Inhalt Ihres htaccess in dem größeren Eingabebereich und drücken Sie die Schaltfläche "Test". 

http://htaccess.mwl.be/

1
Ganesh Kandu