Dlaczego włączenie przepisywania logowania .htaccess nie działa?

9

Chcę włączyć rejestrowanie przepisywania, aby móc debugować regułę przepisywania, ale dodanie dyrektyw RewriteLog powoduje błąd 500.

Informacje o wersji:

Ubuntu 14.04

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

zawartość .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>

W dzienniku błędów widzę:

/var/www/path.to/wordpress/.htaccess: Invalid command 'RewriteLog', perhaps misspelled or defined by a module not included in the server configuration
codecowboy
źródło

Odpowiedzi:

14

Poza tym, że zapomniałeś, że rejestrowania nie można skonfigurować w .htaccessplikach, okazało się to również problemem wersji Apache. Dyrektywa RewriteLog została zastąpiona w nowszych wersjach, a dodanie poniższej konfiguracji Virtualhost umożliwiło mi zapisywanie dziennika:

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

Z instrukcji:

Osoby zaznajomione z wcześniejszymi wersjami mod_rewrite bez wątpienia będą szukać dyrektyw RewriteLog i RewriteLogLevel. Ta funkcja została całkowicie zastąpiona przez wspomnianą wyżej nową konfigurację rejestrowania dla poszczególnych modułów.

Aby odfiltrować te komunikaty w dzienniku błędów, możesz wykonać następujące czynności:

tail -f error_log|fgrep '[rewrite:'
codecowboy
źródło
Twoje pytanie zostało pierwotnie oznaczone apache-2.2, prawda? i mogłem przeoczyć wersję w samym pytaniu. Dobrze zauważony.
HBruijn
Gdyby to pomogło komukolwiek, mój problem polegał na tym, że włączałem logowanie do VHost dla portu 80, ale nie 443. Używałem HTTPS, więc moje logowanie nie działało.
Trochę mi zajęło
Chciałbym dodać, że musisz mod_log_debugwłączyć ...
thoni56,
4

Nie mogę się powstrzymać od powtórzenia się:

Większość ludzi, którzy używają .htaccess i pytają o to w ServerFault, nie powinni używać .htaccess w pierwszej kolejności, ponieważ jest to rozwiązanie dla użytkowników końcowych, które nigdy nie było przeznaczone dla administratorów:

Należy unikać używania plików .htaccess całkowicie, jeśli masz dostęp do pliku konfiguracyjnego głównego serwera httpd. Używanie .htaccessplików spowalnia serwer HTTP Apache. Każda dyrektywa, którą można dołączyć do pliku .htaccess, jest lepiej ustawiona w bloku katalogu, ponieważ będzie miała ten sam efekt z lepszą wydajnością.
Źródło: instrukcja Apache

Najwyraźniej większość osób, które publikują swoje konfiguracje, wydaje się być programistami kultowymi, którzy chętnie kopiują pliki .htaccess na ślepo bez zrozumienia przyczyn.

Twój problem jest doskonałym przykładem: RewriteLogdyrektywa jest ważna tylko w kontekście konfiguracji serwera lub wirtualnego hosta ...

Oznacza to, że nie jest dozwolone w .htaccesspliku!

HBruijn
źródło
4
Wyszukiwanie dzienników jest dokładnie tym, co zrobiłby ktoś, kto chce się uczyć, a nie kopiować. Wygląda na to, że Apache skonfigurował klasyczny catch-22: Powinieneś używać .htaccess tylko wtedy, gdy nie możesz uzyskać dostępu do katalogu głównego serwera. Ale można włączyć tylko na rejestrowanie jeśli można uzyskać dostęp root serwera. Jeśli pozwolą ci zrobić to wszystko przepisywanie w .htaccess, powinni pozwolić ci zalogować się, co robi, więc nie musisz polegać na losowym kopiowaniu i wklejaniu / próbowaniu i błędzie.
Mark Berry
5
Niektóre aplikacje, takie jak Wordpress, generują pliki .htaccess, które wymagają debugowania. Wydaje się, że tak jest w tym przypadku. Logowanie z pliku .htaccess jest logicznym pierwszym krokiem, gdy próbujesz wypracować niezrozumiałe wyrażenia regularne innej osoby.
KeithL,