У меня есть две основные проблемы с mod_rewrite:
1) Нет значимой ошибки при неправильном правиле
2) Чтобы надежно протестировать каждую модификацию, я должен стереть кэш Chrome. Это не ракетостроение, но я должен нажать Ctrl + Shift + Delete, затем нажать OK, затем закрыть окно и перезагрузить.
Я хотел бы посмотреть, не желает ли кто-нибудь из гуру поделиться своими секретами для эффективного управления кодом mod_rewrite.
Ответы:
Одна хитрость заключается в том, чтобы включить журнал перезаписи. Чтобы включить его, попробуйте эти строки в основном конфиге apache или в текущем файле виртуального хоста ( не в
.htaccess
):С тех пор как Apache httpd 2.4 mod_rewrite директивы RewriteLog и RewriteLogLevel были полностью заменены новой конфигурацией ведения журнала для каждого модуля.
источник
RewriteEngine On
раздел там, потому что если вы включите его (как я сделал) в.htaccess
файле, то ничего не будет зарегистрировано.Директива LogRewrite, упомянутая Беном, больше не доступна в Apache 2.4. Вместо этого вам нужно использовать директиву LogLevel. Например
См. Http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#logging.
источник
tail -f error_log|fgrep '[rewrite:'
AllowOverride
был установленAll
!Для базового разрешения URL-адресов используйте средство извлечения командной строки, например
wget
или,curl
чтобы выполнить тестирование, а не ручной браузер. Тогда вам не нужно очищать кеш; просто стрелка вверх и Enter в оболочке, чтобы повторно запустить тестовые выборки.источник
Есть тестер htaccess .
Он показывает, какие условия были проверены для определенного URL, какие соответствовали критериям и какие правила были выполнены.
Похоже, есть некоторые глюки, хотя.
источник
Исходя из ответа Бена, вы можете сделать следующее при запуске apache в Linux (Debian в моем случае).
Сначала создайте файл rewrite-log.load
/etc/apache2/mods-availabe/rewrite-log.load
Затем введите
с последующим
И когда вы закончили с отладкой ваших правил переписывания
источник
LogLevel warn rewrite:trace8
илиLogLevel info rewrite:trace8
где 8 может быть любым числом от 1 до 8