Warum funktioniert das Aktivieren des Umschreibungsprotokolls in .htaccess nicht?

9

Ich möchte die Umschreibprotokollierung aktivieren, damit ich eine Umschreiberegel debuggen kann, aber das Hinzufügen der RewriteLog-Anweisungen verursacht einen 500-Fehler.

Versionsinformation:

Ubuntu 14.04

Server version: Apache/2.4.12 (Ubuntu)
Server built:   Feb  4 2015 14:22:06

Inhalt von .htaccess

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteLog /var/log/apache2/rewrite.log
RewriteLogLevel 5

RewriteBase /

RewriteRule ^/wordpress/wp-content/(.*)$ /wp-content/$1 [L]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Im Fehlerprotokoll sehe ich:

/var/www/path.to/wordpress/.htaccess: Invalid command 'RewriteLog', perhaps misspelled or defined by a module not included in the server configuration
Codecowboy
quelle

Antworten:

14

Dies hat nicht nur vergessen, dass die Protokollierung nicht in .htaccessDateien konfiguriert werden kann, sondern auch ein Problem mit der Apache-Version. Die RewriteLog-Direktive wurde in neueren Versionen ersetzt, und durch Hinzufügen der folgenden Elemente zur Virtualhost-Konfiguration wurde das Umschreibungsprotokoll für mich aktiviert:

LogLevel alert rewrite:trace3 (can be increased to trace8)

Aus dem Handbuch:

Diejenigen, die mit früheren Versionen von mod_rewrite vertraut sind, werden zweifellos nach den Anweisungen RewriteLog und RewriteLogLevel suchen. Diese Funktionalität wurde vollständig durch die oben erwähnte neue Protokollierungskonfiguration pro Modul ersetzt.

Um diese Meldungen im Fehlerprotokoll herauszufiltern, können Sie Folgendes tun:

tail -f error_log|fgrep '[rewrite:'
Codecowboy
quelle
Ihre Frage wurde ursprünglich mit Apache-2.2 markiert, oder? und ich habe möglicherweise die Version in der Frage selbst übersehen. Gut erkannt.
HBruijn
Falls dies jemandem hilft, bestand mein Problem darin, dass ich die Protokollierung im VHost für Port 80 aktiviert habe, jedoch nicht für 443. Ich habe HTTPS verwendet, sodass meine Protokollierung nicht funktioniert hat. Ich habe eine Weile
gebraucht
Ich möchte hinzufügen, dass Sie mod_log_debugaktiviert haben müssen ...
thoni56
4

Ich kann nicht anders, als mich zu wiederholen:

Die meisten Benutzer, die .htaccess verwenden und in ServerFault danach fragen, sollten .htaccess überhaupt nicht verwenden, da dies eine Endbenutzerlösung ist, die niemals für Administratoren gedacht ist:

Sie sollten die Verwendung von .htaccess-Dateien vollständig vermeiden, wenn Sie Zugriff auf die Konfigurationsdatei des httpd-Hauptservers haben. Die Verwendung von .htaccessDateien verlangsamt Ihren Apache http-Server. Jede Anweisung, die Sie in eine .htaccess-Datei aufnehmen können, wird besser in einem Verzeichnisblock festgelegt, da sie bei besserer Leistung den gleichen Effekt hat.
Quelle: Apache-Handbuch

Anscheinend scheinen die meisten Leute, die ihre Konfigurationen veröffentlichen, Frachtkult-Programmierer zu sein, die daran interessiert sind, .htaccess-Dateien blind zu kopieren, ohne die Gründe zu verstehen.

Ihr Problem ist ein Paradebeispiel: Die RewriteLogDirektive ist nur im Kontext einer Serverkonfiguration oder des virtuellen Hosts gültig ...

Das heißt, es ist in einer Datei nicht erlaubt.htaccess !

HBruijn
quelle
4
Das Suchen nach Protokollen ist genau das, was jemand tun würde, der lernen und nicht kopieren möchte. Apache hat anscheinend einen klassischen catch-22 eingerichtet: Sie sollten .htaccess nur verwenden, wenn Sie nicht auf das Server-Stammverzeichnis zugreifen können . Sie können die Protokollierung jedoch nur aktivieren, wenn Sie auf das Server-Stammverzeichnis zugreifen können . Wenn Sie das gesamte Umschreiben in .htaccess durchführen können, sollten Sie protokollieren können, was es tut, damit Sie sich nicht auf zufälliges Kopieren und Einfügen / Ausprobieren verlassen müssen.
Mark Berry
5
Einige Anwendungen wie Wordpress generieren .htaccess-Dateien, die debuggt werden müssen. Dies scheint hier der Fall zu sein. Die Protokollierung aus einer .htaccess-Datei ist ein logischer erster Schritt, wenn Sie versuchen, die unergründlichen regulären Ausdrücke einer anderen Person zu ermitteln.
KeithL