Как отладить Apache mod_rewrite
У меня две основные проблемы с mod_rewrite:
1) Не сообщалось о значимой ошибке, когда у меня есть неверное правило
![enter image description here]()
2) Чтобы надежно проверить каждую модификацию, я должен удалить хром-кеш. Это не ракетостроение, но мне нужно нажать Ctrl + Shift + Delete, затем нажмите "ОК", затем закройте окно и перезагрузите.
Я хотел бы узнать, готовы ли какие-либо из гуру поделиться своими секретами, чтобы эффективно управлять кодом mod_rewrite.
Ответы
Ответ 1
Одна хитрость заключается в том, чтобы включить журнал перезаписи. Чтобы включить его, попробуйте эти строки в основном конфиге apache или в текущем файле виртуального хоста (не в .htaccess
):
RewriteEngine On
RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3
С тех пор как Apache httpd 2.4 mod_rewrite директивы RewriteLog и RewriteLogLevel были полностью заменены новой конфигурацией ведения журнала для каждого модуля.
LogLevel alert rewrite:trace6
Ответ 2
Директива LogRewrite, упомянутая Беном, больше не доступна в Apache 2.4.
Вместо этого вам нужно использовать директиву LogLevel. Например.
LogLevel alert rewrite:trace6
См. http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#logging
Ответ 3
Для базового разрешения URL-адреса используйте командную строку, например wget
или curl
, чтобы выполнить тестирование, а не ручной браузер. Тогда вам не нужно очищать кеш; просто стрелка вверх и введите в оболочку, чтобы повторно запустить ваши тестовые выборки.
Ответ 4
Там тестер htaccess.
Он показывает, какие условия были протестированы для определенного URL-адреса, какие из них соответствуют критериям и какие правила были выполнены.
У нас, кажется, есть некоторые сбои.
Ответ 5
На основе 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