Почему не работает включение журнала перезаписи в .htaccess?

9

Я хочу включить ведение журнала перезаписи, чтобы можно было отладить правило перезаписи, но добавление директив RewriteLog вызывает ошибку 500.

Информация о версии:

Ubuntu 14.04

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

содержание .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>

В журнале ошибок я вижу:

/var/www/path.to/wordpress/.htaccess: Invalid command 'RewriteLog', perhaps misspelled or defined by a module not included in the server configuration
codecowboy
источник

Ответы:

14

В дополнение к тому, что забыли, что ведение журнала не может быть настроено в .htaccessфайлах, это также оказалось проблемой версии Apache. Директива RewriteLog была заменена в более новых версиях, и добавление следующего в конфигурацию Virtualhost позволило мне переписать журнал:

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

Из руководства:

Те, кто знаком с более ранними версиями mod_rewrite, без сомнения, будут искать директивы RewriteLog и RewriteLogLevel. Эта функциональность была полностью заменена новой конфигурацией регистрации для каждого модуля, упомянутой выше.

Чтобы отфильтровать эти сообщения в журнале ошибок, вы можете сделать что-то вроде:

tail -f error_log|fgrep '[rewrite:'
codecowboy
источник
Ваш вопрос был изначально помечен как apache-2.2, верно? и я, возможно, упустил из виду версию в самом вопросе. Хорошо подмечено.
HBruijn
В случае, если это кому-нибудь поможет, моя проблема была в том, что я включил вход в VHost для порта 80, а не 443. Я использовал HTTPS, поэтому моя регистрация не работала. Мне
понадобилось
Я хотел бы добавить, что вы должны были mod_log_debugвключить ...
thoni56
4

Я не могу удержаться от повторения:

Большинству людей, которые используют .htaccess и спрашивают об этом в ServerFault, не следует использовать .htaccess в первую очередь, поскольку это решение для конечного пользователя, никогда не предназначенное для администраторов:

Вам следует избегать использования файлов .htaccess полностью, если у вас есть доступ к файлу конфигурации основного сервера httpd. Использование .htaccessфайлов замедляет работу вашего http-сервера Apache. Любая директива, которую вы можете включить в файл .htaccess, лучше задана в блоке Directory, так как она будет иметь тот же эффект с лучшей производительностью.
Источник: руководство Apache

Очевидно, большинство людей, публикующих свои конфигурации, похоже, являются программистами культового груза, которые стремятся слепо копировать файлы .htaccess, не понимая причин.

Ваша проблема является ярким примером: RewriteLogдиректива действительна только в контексте конфигурации сервера или виртуального хоста ...

Это означает, что это не разрешено в .htaccessфайле!

HBruijn
источник
4
Поиск журналов - это именно то, что делает тот, кто хочет учиться, а не копировать. Кажется, что Apache установил классический catch-22: вы должны использовать .htaccess, только если не можете получить доступ к корню сервера. Но вы можете включить ведение журнала, только если у вас есть доступ к корню сервера. Если они позволяют вам все это переписывать в .htaccess, они должны позволять вам регистрировать, что он делает, чтобы вам не пришлось полагаться на случайное копирование и вставку / пробную версию и ошибку.
Марк Берри
5
Некоторые приложения, такие как Wordpress, генерируют файлы .htaccess, которые необходимо отлаживать. Это, кажется, имеет место здесь. Ведение журнала из файла .htaccess является логическим первым шагом, когда вы пытаетесь отработать непонятные чужие регулярные выражения.
KeithL