2012-03-09 4 views
135

У меня есть две основные проблемы, связанные с mod_rewrite:Как отлаживать Apache mod_rewrite

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

enter image description here

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

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

+1

Puk, см. Http://stackoverflow.com/questions/9153262/tips-for-debugging-htaccess-rewrite-rules, где я обсуждаю некоторые трюки stanbdard. – TerryE

+0

Возможный дубликат [Как отладить скрипт перезаписи htaccess] (http://stackoverflow.com/questions/7738170/how-to-debug-htaccess-rewrite-script) – user

ответ

215

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

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

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

LogLevel alert rewrite:trace6 
+1

спасибо. Это не то, что я искал, но все же лучше, чем ничего. – puk

+66

Вы не можете поместить это в .htaccess. Вы должны поместить его в конфигурацию VirtualHost. –

+1

Не работает для меня на 2.2. – cbmanica

18

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

+11

Еще один трюк - использовать Chrome «Режим Porn» (Ctl + Shift + N). Когда вы закрываете окно, любой контекст кэшированного сеанса сбрасывается. – TerryE

+0

Я думаю, что «частная сессия» Firefox также просматривается. Но вы говорите, что этот контекст для каждого окна (так что вы не закрываете Chrome?) – Kaz

+2

AFAIK, Chrome и Ff отличаются тем, что Ff работает как отдельный процесс, который находится в закрытом режиме или нет. В Chrome каждая вкладка или окно выполняется как отдельный процесс и может быть индивидуально в закрытом режиме; закройте приватное окно/вкладку, и этот контекст разбит. – TerryE

97

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

LogLevel alert rewrite:trace6 

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

+3

ничего не регистрируется! – Michael

+15

где находится файл журнала, связанный с этим? –

+5

@CharlesJohnThompsonIII - Файл журнала - это журнал ошибок (указанный директивой ErrorLog). В документах вы можете получить только сообщения перезаписи с grep: 'tail -f error_log | fgrep '[rewrite:'' – billynoah

3

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

Сначала создайте файл переписывания-log.load

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

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

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

$ a2enmod rewrite-log

0 llowed по

$ службы apache2 перезагрузкой

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

$ a2dismod переписать лог & рестарта apache2 & службы

+0

Это не сработало. Я получаю зависть sandino @: ~ $ sudo service apache2 restart * Перезапуск веб-сервера apache2 [fail] * Ошибка конфигурации apache2. Вывод теста конфигурации: AH00526: Ошибка синтаксиса в строке 1 файла /etc/apache2/mods-enabled/rewrite-log.load: Неверная команда 'RewriteLog', возможно, с ошибкой или определяется модулем, не включенным в сервер конфигурация – sandino

+0

@sandino, какая версия Apache вы используете? Кажется, этот синтаксис был изменен на 2.4, вместо этого: «LogLevel warn rewrite: trace8' или« LogLevel info rewrite: trace8 », где 8 может быть любым числом от 1 до 8 – insaner

8

Там в htaccess tester.

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

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

+2

Для меня это показало зеленое выполненное правило в последней строке без какого-либо кода. – Andy

+0

Кажется, не работает. – ethmz

+0

@thombr вы можете быть более точным, пожалуйста? Ссылка не работает? Или инструмент? Что именно не работает? И почему это актуально в контексте этого вопроса? – Andy