Как отлаживать Apache mod_rewrite

128

У меня две основные проблемы с mod_rewrite:

1) Не сообщалось о значимой ошибке, когда у меня есть неверное правило

Изображение 514

2) Чтобы надежно проверить каждую модификацию, я должен удалить хром-кеш. Это не ракетостроение, но мне нужно нажать Ctrl + Shift + Delete, затем нажмите "ОК", затем закройте окно и перезагрузите.

Я хотел бы узнать, готовы ли какие-либо из гуру поделиться своими секретами, чтобы эффективно управлять кодом mod_rewrite.

Теги:
mod-rewrite

5 ответов

214
Лучший ответ

Один трюк - включить журнал перезаписи. Чтобы включить его, попробуйте эти строки в основной конфигурации apache или в текущем файле виртуального хоста ( не в .htaccess):

RewriteEngine On
RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3

Так как Apache httpd 2.4 mod_rewrite Директивы RewriteLog и RewriteLogLevel полностью заменены новой конфигурацией регистрации каждого модуля.

LogLevel alert rewrite:trace6
  • 1
    Благодарю. Это не то, что я искал, но все же лучше, чем ничего.
  • 74
    Вы не можете поместить это в .htaccess. Вы должны поместить его в конфигурацию VirtualHost.
Показать ещё 7 комментариев
90

Директива LogRewrite, упомянутая Беном, больше не доступна в Apache 2.4. Вместо этого вам нужно использовать директиву LogLevel. Например.

LogLevel alert rewrite:trace6

См. http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#logging

  • 3
    ничего не регистрируется!
  • 18
    где файл журнала связан с этим?
Показать ещё 4 комментария
18

Для базового разрешения URL-адреса используйте командную строку, например wget или curl, чтобы выполнить тестирование, а не ручной браузер. Тогда вам не нужно очищать кеш; просто стрелка вверх и введите в оболочку, чтобы повторно запустить ваши тестовые выборки.

  • 12
    Еще одна хитрость заключается в использовании Chrome «Porn mode» (Ctl + Shift + N). Когда вы закрываете окно, любой кэшированный контекст сеанса удаляется.
  • 0
    Я думаю, что Firefox "частный сеанс" просмотра также. Но вы говорите, что это контекст для отдельного окна (значит, вы не закрываете Chrome?)
Показать ещё 3 комментария
7

Там тестер htaccess.

Он показывает, какие условия были протестированы для определенного URL-адреса, какие из них соответствуют критериям и какие правила были выполнены.

У нас, кажется, есть некоторые сбои.

  • 2
    Для меня это показало зеленое правило выполнения в последней строке без какого-либо кода.
  • 0
    Кажется, не работает.
Показать ещё 4 комментария
3

На основе Ben answer вы могли бы сделать следующее при запуске apache в Linux (Debian в моем случае).

Сначала создайте файл rewrite-log.load

/etc/apache2/mods-availabe/rewrite-log.load

RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3

Затем введите

$a2enmod rewrite-log

за которым следует

$service apache2 restart

И когда вы закончили с отладкой правил перезаписи

$a2dismod rewrite-log && & service apache2 restart

  • 0
    Это не сработало. Я получаю sandino @ envy: ~ $ sudo service apache2 restart * Перезапуск веб-сервера apache2 [fail] * Сбой configache apache2. Вывод теста конфигурации был: AH00526: Синтаксическая ошибка в строке 1 /etc/apache2/mods-enabled/rewrite-log.load: Неверная команда 'RewriteLog', возможно, с ошибкой или определена модулем, не включенным в конфигурацию сервера
  • 0
    @sandino, какую версию apache вы используете? Кажется, этот синтаксис был изменен для 2.4, вместо этого используйте: LogLevel warn rewrite:trace8 или LogLevel info rewrite:trace8 где 8 может быть любым числом от 1 до 8

Ещё вопросы

Сообщество Overcoder
Наверх
Меню