Создание правил переопределения для модуля переопределения URL-адресов

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

Модуль перезаписи URL-адресов — это расширение iis, которое доступно как скачивание для автономного сервера IIS, а также предварительно установлено на любом веб-сайте на веб-сайтах Windows Azure (WAWS) и доступно для вашего использования. В этом пошаговом руководстве описано, как создать и проверить набор правил перезаписи для модуля перезаписи URL-адресов.

Необходимые условия

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

  1. IIS 7 или более поздней версии с включенной службой ролей ASP.NET.
  2. Установлен модуль переопределения URL-адресов. Дополнительные сведения см. в разделе "Использование модуля перезаписи 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, затем проверьте правильность отображения страницы в браузере.

Создание правила перезаписи

Мы создадим простое правило перезаписи, которое будет переопределять URL-адреса с помощью следующего формата:

http://localhost/article/342/some-article-title
to:
http://localhost/article.aspx?id=342&title=some-article-title.

Мы создадим правило перезаписи с помощью пользовательского интерфейса перезаписи URL-адресов в диспетчере IIS. Для этого выполните следующие действия.

  1. Перейдите в диспетчер IIS.
  2. Выберите веб-сайт по умолчанию.
  3. В представлении компонентов щелкните "Перезаписать URL-адрес".
    Снимок экрана, показывающий панель
  4. В области "Действия " справа нажмите кнопку "Добавить правила" ...
    Снимок экрана, показывающий панель URL Rewrite.
  5. В диалоговом окне "Добавление правил" выберите пустое правило и нажмите кнопку "ОК".
    Снимок экрана: диалоговое окно

Теперь необходимо определить фактическое правило перезаписи. В модуле переопределения URL-адресов правило перезаписи определяется путем указания четырех обязательных фрагментов информации:

  • Имя правила.
  • Шаблон, используемый для сопоставления строки URL-адреса.
  • Необязательный набор условий.
  • Действие, которое следует выполнить, если шаблон совпадает и все проверки условий успешны.

Именование правила

В текстовом поле "Имя" введите имя, уникально определяющее правило, например "Переписать в article.aspx".

Снимок экрана с панелью «Редактирование правила входящего трафика».

Определение шаблона

В текстовом поле "Шаблон " введите следующую строку:

^article/([0-9]+)/([_0-9a-z-]+)

Эта строка представляет собой регулярное выражение, указывающее, что шаблон будет соответствовать любой строке URL-адреса, которая соответствует следующим условиям:

  1. Начинается с последовательности символов "статья/".
  2. Содержит один или несколько числовых символов после первого "/".
  3. Содержит один или несколько буквенно-цифровых символов или "_" или "-" после второго "/".

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

Определение действия

Так как создаваемое правило должно перезаписать URL-адрес, выберите тип действия перезаписи, указанный в поле группы действий. В поле Перезапись URL-адреса: введите следующую строку:

article.aspx?id={R:1}&title={R:2}

Эта строка указывает новое значение, в которое должен быть перезаписан входной URL-адрес. Обратите внимание, что для значений параметров строки запроса мы использовали {R:1} и {R:2}, которые являются обратными ссылками на группы отслеживания, определенные в шаблоне правила с помощью скобок.

Оставьте значения по умолчанию для всех остальных параметров. Страница свойства "Изменить правило входящего трафика " должна выглядеть следующим образом:

Снимок экрана: страница свойств

Сохраните правило, нажав кнопку "Применить" справа.

Просмотр правила перезаписи в файле конфигурации

Правила перезаписи хранятся либо в файле ApplicationHost.config, либо в файлах Web.config. Чтобы проверить конфигурацию только что созданного правила, откройте файл Web.config, расположенный в %SystemDrive%\inetpub\wwwroot. В этом файле вы увидите <rewrite> раздел, содержащий это определение правила:

<rewrite>
  <rules>
    <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>

Приведенный выше синтаксис также применяется к настройке перезаписи URL-адресов в Web.config на веб-сайтах Windows Azure (WAWS).

Тестирование правила перезаписи

Чтобы проверить корректную перенаправку URL-адресов правила, откройте веб-браузер и запросите следующий URL-адрес:

http://localhost/article/234/some-title

Вы должны увидеть, что правило перезаписи на веб-сервере изменило исходный URL-адрес на Article.aspx, и передало "234" и "some-title" в качестве значений для параметров строки запроса.

Снимок экрана: страница тестового теста модуля переопределения U R L в Internet Explorer.

Создание правила перенаправления

Теперь мы создадим правило перенаправления, которое перенаправит все URL-адреса в следующем формате:

http://localhost/blog/some-other-title/543
в следующем формате:
http://localhost/article/543/some-other-title

Правило перенаправления позволяет указывать несколько URL-адресов на одну веб-страницу.

Для этого откройте пользовательский интерфейс представления функций переопределения URL-адресов в диспетчере IIS. Нажмите кнопку "Добавить правила"... Затем снова выберите шаблон пустого правила .

На странице "Изменение правила " введите следующее:

  • Имя: Перенаправление из блога (это уникальное имя правила.)
  • Шаблон: ^blog/([_0-9a-z-]+)/([0-9]+) (Этот шаблон будет соответствовать строке URL-адреса, которая начинается с "блога" и записывает второй и третий сегменты URL-адреса в обратные ссылки.)
  • Действие: перенаправление (действие перенаправления приведет к отправке ответа перенаправления обратно в браузер.)
  • URL-адрес перенаправления: статья/{R:2}/{R:1} (эта строка подстановки будет использоваться в качестве URL-адреса перенаправления; обратите внимание, что чтобы сохранить и изменить исходные фрагменты URL-адресов, захваченные во время сопоставления шаблона).

Введите имя, шаблон и действие, как показано ниже:

Снимок экрана: панель

Введите URL-адрес перенаправления, как показано ниже:

Снимок экрана: панель

Оставьте значения по умолчанию для всех остальных параметров. Сохраните правило, нажав кнопку "Применить" справа.

Тестирование правила перенаправления

Чтобы проверить, что правило корректно перенаправляет запросы, откройте веб-браузер и введите следующий URL-адрес:

http://localhost/blog/some-other-title/323

Вы должны увидеть, что браузер был перенаправлен http://localhost/article/323/some-other-title в результате выполнения правила перенаправления, а затем запрос был перезаписан в соответствии с созданным ранее правилом перезаписи.

Снимок экрана, показывающий Internet Explorer на тестовой странице модуля переписывания U R L.

Создание правила блокировки доступа

Третье правило, которое мы создадим, используется для блокировки всех запросов, сделанных к веб-сайту, если эти запросы не имеют установленного заголовка хоста. Этот тип правила полезен, если вы хотите предотвратить попытки взлома, которые выполняются путем выдачи HTTP-запросов к IP-адресу сервера вместо использования имени узла.

Мы создадим это правило без использования диспетчера IIS. Откройте файл Web.config в %SystemDrive%\inetpub\wwwroot\ папке, используемой для тестового файла article.aspx в начале этой статьи. Найдите раздел <rewrite>. Вставьте следующее правило в <коллекцию правил> , чтобы оно было первым правилом в коллекции:

<rule name="Fail bad requests">
  <match url=".*"/>
  <conditions>
    <add input="{HTTP_HOST}" pattern="localhost" negate="true" />
  </conditions>
  <action type="AbortRequest" />
</rule>

Раздел <rewrite> должен выглядеть следующим образом:

<rewrite>
  <rules>
    <rule name="Fail bad requests">
      <match url=".*"/>
      <conditions>
        <add input="{HTTP_HOST}" pattern="localhost" negate="true" />
      </conditions>
      <action type="AbortRequest" />
    </rule>
    <rule name="Redirect from blog">
      <match url="^blog/([_0-9a-z-]+)/([0-9]+)" />
      <action type="Redirect" url="article/{R:2}/{R:1}" redirectType="Found" />
    </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>

Давайте проанализируем правило, чтобы понять, что это делает.

<match url=".*"/>

Приведенный выше элемент говорит, что правило будет соответствовать любой строке URL-адреса.

<add input="{HTTP_HOST}" pattern="localhost" negate="true" />

Приведенный выше элемент добавляет условие в правило, которое извлекает значение заголовка узла, считывая переменную сервера HTTP_HOST, сопоставляет ее с шаблоном localhost, а затем отрицает результат сопоставления. Другими словами, условие проверяет, что заголовок хоста не совпадает с "localhost".

<action type="AbortRequest" />

Приведенный выше элемент сообщает модулю переопределения URL-адресов, чтобы завершить HTTP-запрос.

Тестирование правила блокировки доступа

Чтобы проверить это правило, откройте веб-браузер и отправьте запрос http://127.0.0.1/article/234/some-title. Вы должны увидеть, что браузер не получает никакого ответа от сервера. Однако при запросе http://localhost/article/234/some-titleвеб-сервер будет успешно реагировать.

Неудачное отображение будет следующим:

Снимок экрана, на котором показан браузер, на котором указано, что эта страница не может отображаться.

Успешное отображение будет следующим:

Снимок экрана: страница тестового теста модуля переопределения U R L в браузере.

Сводка

В этом пошаговом руководстве вы узнали, как настроить правила перезаписи URL-адресов с помощью диспетчера IIS или вручную редактировать файлы Web.config. Правила, созданные в этом пошаговом руководстве, показали некоторые важные функции модуля перезаписи URL-адресов, такие как поддержка регулярных выражений и возможность использовать заголовки HTTP и переменные сервера для принятия решений по перезаписи.