Назад | Перейти на главную страницу

Как узнать, против чего тестирует RewriteRule?

Учитывая следующее правило перезаписи Apache:

RewriteRule .* foo

... как мне узнать точно против какой строки. * проверяется? Предположим, что до этого момента можно было применить любое количество произвольных правил перезаписи, и что я не могу узнать, что они собой представляют (предположим, что httpd.conf скрыт от меня).

РЕДАКТИРОВАТЬ: Спасибо, но имейте в виду, что я не иметь доступ для редактирования (или даже чтения!) httpd.conf. В моем распоряжении только файлы .htaccess.

РЕДАКТИРОВАТЬ: удалено решение, требующее доступа к httpd.conf

Это сработает, просто укажите это перед правилом перезаписи:

RewriteRule (.*) - [ENV=MYREWRITERULETEST:$1]

Затем в файле .ssi или .cgi выведите эту переменную.

Попытки посмотреть на другие переменные не обязательно скажут вам, с чем согласуется ваше правило; они расскажут вам, с чем было выполнено сопоставление перед запуском любых правил перезаписи или как все будет выглядеть после выполнения всех правил перезаписи.

mod_rewrite использует регулярные выражения чтобы идентифицировать конкретную строку, а затем перезаписывает ее с указанной заменой. В случае вашего примера:

RewriteRule .* foo

mod_rewrite будет соответствовать любому символу (это то, что означает ".") столько раз, сколько он повторяется (отсюда и "*"). Теперь, поскольку «*» повторяет «.», Это означает, что он будет соответствовать любой строке с любыми символами любой комбинации и длины. Затем он заменит это большое, длинное слово на «foo».

Итак, чтобы использовать mod_rewrite, вам нужно иметь хотя бы базовое понимание регулярных выражений, а также полное понимание того, что вы хотите сопоставить и переписать как.

Я часто использую небольшую программу вроде Регги или Кики чтобы помочь мне разобрать мое регулярное выражение. Вы также можете найти это полезным.

Надеюсь, это поможет.

Если у вас был доступ к httpd.conf, это ответ описывает, как включить ведение журнала для mod_rewrite, что даст вам именно то, что вы хотите.

Если у вас есть доступ к .htaccess файл в обслуживаемой файловой системе, вы можете внести в него изменения конфигурации, чтобы активировать ведение журнала.

В противном случае лучшим выбором будет метод проб и ошибок!

Я знаю, что это заголовок в IIS, я не знаю об Apache, но заголовок UNENCODED_URL или HTTP_URL может дать вам URL-адрес на стороне сервера, если вы запросите его в своем сценарии на стороне сервера (ASP / PHP / что угодно).

Затем вы можете использовать это для обратного отслеживания правила в .htaccess