Поделиться через


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

Руслан Якушев

IIS 7.0 и более поздних версий — это мощный инструмент для устранения ошибок обработки запросов. FRT можно использовать с модулем переопределения URL-адресов для отслеживания применения правил перезаписи к URL-адресу запроса. В этом пошаговом руководстве описано, как использовать FRT для устранения неполадок и отладки правил переопределения URL-адресов. Дополнительные сведения о трассировке неудачных запросов см. в этой статье.

Предварительные требования

Для этого пошагового руководства требуются следующие предварительные требования:

  1. IIS 7.0 или более поздней версии с включенными службами ASP.NET и ролей трассировки
  2. Установленный выпуск 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}&amp;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. Если правила настроены правильно, в браузере должен появиться следующий ответ:

Снимок экрана: страница теста модуля переопределения URL-адреса, на котором отображаются исходные и переписанные версии U R L.

Настройка трассировки неудачных запросов

Теперь включите трассировку неудачных запросов для веб-сайта по умолчанию (пошаговые инструкции по включению FRT см. в в этой статье ). После включения трассировки неудачных запросов мы создадим правило FRT для трассировки событий, относящихся к модулю переопределения URL-адресов.

Чтобы создать правило FRT в диспетчере IIS, выполните следующие действия.

  1. Щелкните значок "Правила трассировки неудачных запросов", чтобы перейти к списку правил FRT.
    Снимок экрана: панель
  2. Щелкните "Добавить..." действие для запуска мастера создания правил FRT. Снимок экрана: диалоговое окно
  3. На первой странице мастера выберите "Все содержимое (*)"
  4. Нажмите кнопку "Далее" и укажите коды состояния "200-399".
    Снимок экрана: установка кодов состояния на значение 200 тире 399.
  5. Нажмите кнопку Далее, а затем снимите флажок все поставщики трассировки, кроме "WWW Server", а затем снимите флажок все области поставщиков, кроме "Перезаписать".Снимок экрана: параметр
  6. Нажмите кнопку Готово, чтобы сохранить правило FRT.

Если модуль трассировки неудачных запросов был установлен после перезаписи URL-адреса, область "Перезаписать" в поставщиках трассировки может быть недоступна. Если вы не видите область перезаписи, перейдите в раздел Установка и удаление программ, а затем запустите установщик модуля переопределения URL-адресов в режиме восстановления.

Анализ файла журнала трассировки неудачных запросов

После создания правила FRT сделайте запрос к http://localhost/article/234/some-title. При этом будет создан журнал FRT в %SystemDrive%\inetpub\Logs\FailedReqLogFiles\. Этот журнал можно открыть с помощью интернет-Обозреватель, и он будет отображаться в виде HTML-документа, который можно легко просматривать. Ниже приведен пример определенных событий перезаписи URL-адресов, которые можно найти в файле журнала трассировки.

Снимок экрана: доступ к журналу F R T с помощью веб-браузера. В журнале отображается список правил перезаписи и их логика перезаписи.

Эти события показывают, как были оценены правила перезаписи и как запрошенный 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-адреса.