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