Использование трассировки неудачных запросов для трассировки правил перезаписи
IIS 7.0 и более поздних версий — это мощный инструмент для устранения ошибок обработки запросов. FRT можно использовать с модулем переопределения URL-адресов для отслеживания применения правил перезаписи к URL-адресу запроса. В этом пошаговом руководстве описано, как использовать FRT для устранения неполадок и отладки правил переопределения URL-адресов. Дополнительные сведения о трассировке неудачных запросов см. в этой статье.
Предварительные требования
Для этого пошагового руководства требуются следующие предварительные требования:
- IIS 7.0 или более поздней версии с включенными службами ASP.NET и ролей трассировки
- Установленный выпуск Go Live для переопределения URL-адресов
Настройка тестовой веб-страницы
Чтобы продемонстрировать, как работает модуль переопределения URL-адресов, мы будем использовать простую тестовую страницу ASP.NET. Эта страница считывает переменные веб-сервера и выводит их значения в браузере.
Скопируйте следующий код ASP.NET и поместите его в папку %SystemDrive%\inetpub\wwwroot\
файла article.aspx:
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>URL Rewrite Module Test</title>
</head>
<body>
<h1>URL Rewrite Module Test Page</h1>
<table>
<tr>
<th>Server Variable</th>
<th>Value</th>
</tr>
<tr>
<td>Original URL: </td>
<td><%= Request.ServerVariables["HTTP_X_ORIGINAL_URL"] %></td>
</tr>
<tr>
<td>Final URL: </td>
<td><%= Request.ServerVariables["SCRIPT_NAME"] + "?" + Request.ServerVariables["QUERY_STRING"] %></td>
</tr>
</table>
</body>
</html>
После копирования этого файла перейдите по адресу http://localhost/article.aspx
и проверка, что страница была правильно отображена в браузере.
Настройка правил перезаписи
Найдите файл web.config в %SystemDrive%\inetpub\wwwroot\
папке или создайте его, если он не существует. Откройте файл web.config и добавьте следующий раздел в элемент :<system.webServer>
<rewrite>
<rules>
<rule name="Fail bad requests">
<match url="." />
<conditions>
<add input="{HTTP_HOST}" negate="true" pattern="localhost" />
</conditions>
<action type="AbortRequest" />
</rule>
<rule name="Rewrite to article.aspx">
<match url="^article/([0-9]+)/([_0-9a-z-]+)" />
<action type="Rewrite" url="article.aspx?id={R:1}&title={R:2}" />
</rule>
</rules>
</rewrite>
- Правило "Неудачные запросы" прерывает HTTP-подключение, если заголовок узла HTTP-запроса не совпадает с "localhost"
- Правило "Перезаписать в article.aspx" перезаписывает URL-адреса из этого формата
http://localhost/article/234/some-title
в этот форматhttp://localhost/article.aspx?id=234&title=some-title
.
Убедитесь, что правила настроены правильно, открыв браузер и выполнив запрос к http://localhost/article/234/some-title
. Если правила настроены правильно, в браузере должен появиться следующий ответ:
Настройка трассировки неудачных запросов
Теперь включите трассировку неудачных запросов для веб-сайта по умолчанию (пошаговые инструкции по включению FRT см. в в этой статье ). После включения трассировки неудачных запросов мы создадим правило FRT для трассировки событий, относящихся к модулю переопределения URL-адресов.
Чтобы создать правило FRT в диспетчере IIS, выполните следующие действия.
- Щелкните значок "Правила трассировки неудачных запросов", чтобы перейти к списку правил FRT.
- Щелкните "Добавить..." действие для запуска мастера создания правил FRT.
- На первой странице мастера выберите "Все содержимое (*)"
- Нажмите кнопку "Далее" и укажите коды состояния "200-399".
- Нажмите кнопку Далее, а затем снимите флажок все поставщики трассировки, кроме "WWW Server", а затем снимите флажок все области поставщиков, кроме "Перезаписать".
- Нажмите кнопку Готово, чтобы сохранить правило FRT.
Если модуль трассировки неудачных запросов был установлен после перезаписи URL-адреса, область "Перезаписать" в поставщиках трассировки может быть недоступна. Если вы не видите область перезаписи, перейдите в раздел Установка и удаление программ, а затем запустите установщик модуля переопределения URL-адресов в режиме восстановления.
Анализ файла журнала трассировки неудачных запросов
После создания правила FRT сделайте запрос к http://localhost/article/234/some-title
. При этом будет создан журнал FRT в %SystemDrive%\inetpub\Logs\FailedReqLogFiles\
. Этот журнал можно открыть с помощью интернет-Обозреватель, и он будет отображаться в виде HTML-документа, который можно легко просматривать. Ниже приведен пример определенных событий перезаписи URL-адресов, которые можно найти в файле журнала трассировки.
Эти события показывают, как были оценены правила перезаписи и как запрошенный URL-адрес был изменен модулем перезаписи. Давайте рассмотрим некоторые события, чтобы лучше понять логику вычисления правил:
URL_REWRITE_START — это событие указывает на начало событий переопределения URL-адреса. Свойства события предоставляют следующие сведения:
- Входная строка URL-адреса — "/article/234/some-title".
- Не было строки запроса.
- Scope="Distributed" указывает, что правила являются локальными (т. е. правилами, определенными в Web.config для сайта), а не глобальными (то есть определенными на уровне сервера).
RULE_EVALUATION_START — это событие указывает на начало логики вычисления правила. Свойства события содержат следующие сведения:
- Правило использует регулярные выражения для синтаксиса шаблона (patternSyntax="ECMAScript")
- Последующие правила будут вычисляться (StopProcessing = "false")
- Правило определяется на корневом уровне сайта (RelativePath = "/")
PATTERN_MATCH — это событие предоставляет сведения о том, как URL-адрес сопоставлялся с шаблоном правила. Свойства события предоставляют следующие сведения:
- Шаблон правила — "." (то есть соответствует любому символу)
- Входной URL-адрес успешно соответствует шаблону
CONDITIONS_EVALUATION_START — так как входной URL-адрес совпадает с шаблоном, запущена оценка условий.
CONDITION_EVALUATION . Это событие предоставляет следующие сведения:
- Значение HTTP_HOST — localhost и соответствует шаблону.
- Так как отрицание условия было указано в правиле (т. е. Negated="true"), вычисление условия не выполнено.
CONDITIONS_EVALUATION_END — это событие показывает, что оценка условий для этого правила не выполнена.
RULE_EVALUATION_END — это событие показывает, что правило не изменял URL-адрес (Succeeded="false"). Это связано с ошибкой оценки условия правила.
RULE_EVALUATION_START — это даже показывает, что строка URL-адреса была передана во второе правило.
PATTERN_MATCH — это событие предоставляет сведения о том, как URL-адрес сопоставлялся с шаблоном правила. Свойства события сообщают нам, что:
- Шаблон правила: "^article/([0-9]+)/([0-9a-z]+)"
- Входной URL-адрес успешно соответствует шаблону
REWRITE_ACTION — это событие указывает, что оценка правила выполнена успешно и URL-адрес был переписан на /article.aspx со строкой запроса id=234&title=some-title.
Итоги
Конкретные события переопределения URL-адресов, зарегистрированные FRT, предоставляют очень подробные сведения, которые можно использовать для устранения неполадок и отладки правил переопределения URL-адресов, а также для понимания того, как логика оценки правил применяется к строке URL-адреса.