Как я могу отладить правила mod_rewrite?

Это случай «задать вопрос и сам ответить на него», который я публикую для всех, у кого есть такая же проблема.

У меня были проблемы с отладкой набора правил mod_rewrite в файле .htaccess на общем сервере, где я даже не мог получить доступ к журналам ошибок Apache. Я нашел изящный способ их отладки, а именно:

  1. Напишите короткий сценарий, который просто распечатывает его переменные строки запроса. например в PHP:

     ', htmlentities (print_r ($ _ GET, true)), '
    '?>

    - это все, что вам нужно.

  2. Допустим, вы назвали этот скрипт «show.php» и поместили его в / public_html. Затем в файле .htaccess определите точку в наборе правил, которая, по вашему мнению, может быть причиной проблемы, и вставьте это правило:

     RewriteRule (. *) /Show.php?url=$1 [END] {{1} } 

Эффект такой же, как при вставке оператора PRINT в обычную программу. Он сообщит вам, что (а) вы достигли этой точки в наборе правил и (б) каков текущий перезаписанный URL-адрес.

Это не так быстро, как настоящий инструмент отладки, но он выполняет свою работу.

Если вы используете Apache <2.3.9, вам придется использовать [L] вместо [END] . В этом случае следует обратить внимание на то, чтобы ваш набор правил не пытался переписать "/show.php" на что-нибудь еще. Если это проблема, вы можете исправить ее, добавив это правило в самом верху:

RewriteRule ^show.php$ - [L]

...Просто не забудьте удалить его, когда закончите отладку!

6
задан Doin 14 March 2013 в 22:22
поделиться