Создание правил для исходящего трафика для модуля переопределения URL-адресов
Этот раздел документации относится к модулю переопределения URL-адресов версии 2.0 для IIS 7.
В этом пошаговом руководстве описано, как создать и проверить правило перезаписи для исходящего трафика для модуля переопределения URL-адресов 2.0.
Предварительные требования
Для этого пошагового руководства требуются следующие предварительные требования:
- IIS 7 или более поздней версии с включенной службой ASP.NET роли;
- Установленный выпуск RC модуля переопределения URL-адресов 2.0.
Настройка тестовой веб-страницы
Чтобы продемонстрировать, как работает модуль 2 переопределения URL-адресов, используйте простую страницу ASP.NET. Эта страница считывает переменные веб-сервера и отображает их значения в браузере. Он также создает гиперссылку с помощью переменных сервера, а затем помещает ее в HTML-код ответа.
Создание тестовой страницы
Создайте файл с именем article.aspx в следующей папке:
%SystemDrive%\inetpub\wwwroot\
Скопируйте следующую разметку ASP.NET, вставьте ее в файл и сохраните файл:
<%@ 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 v2 Test</title> </head> <body> <h1>URL Rewrite Module v2 Test Page</h1> <h2>Inbound URL Rewriting</h2> <table> <tr> <th>Server Variable</th> <th>Value</th> </tr> <tr> <td>Original URL: </td> <td><%= Request.ServerVariables["UNENCODED_URL"] %></td> </tr> <tr> <td>Final URL: </td> <td><%= Request.ServerVariables["SCRIPT_NAME"] + "?" + Request.ServerVariables["QUERY_STRING"] %></td> </tr> </table> <h2>Outbound URL Rewriting</h2> <a href="<%= Request.ServerVariables["SCRIPT_NAME"] + "?" + Request.ServerVariables["QUERY_STRING"] %>">Here</a> is the link to this article. </body> </html>
Откройте веб-браузер и запросите следующий URL-адрес, чтобы убедиться, что страница отображается правильно:
http://localhost/article.aspx
Добавление правила переопределения входящего трафика
Следующим шагом является добавление правила, которое перезаписывает URL-адреса в следующем формате:
http://localhost/article/342/some-article-title
Эти URL-адреса будут переписаны в следующий формат:
http://localhost/article.aspx?id=342&title=some-article-title
Чтобы добавить правило перезаписи для входящего трафика, выполните следующие действия.
Откройте файлweb.config , расположенный в следующем расположении:
%SystemDrive%\inetpub\wwwroot\
В элементе /configuration/system.webServer добавьте следующий код, а затем сохраните файл:
<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}&title={R:2}" /> </rule> </rules> </rewrite>
Дополнительные сведения о создании правил перезаписи для входящего трафика см. в разделе Создание правил переопределения для модуля переопределения URL-адресов.
Тестирование правила перезаписи для входящего трафика
Теперь можно проверить, работает ли правило перезаписи для входящего трафика.
Чтобы протестировать правило перезаписи для входящего трафика, выполните следующие действия.
Откройте веб-браузер и запросите следующий URL-адрес:
http://localhost/article/342/some-article-title
Если правило перезаписи работает правильно, вы получите ответ на сервере, который выглядит следующим образом:
Вы видите, что из-за правила входящего трафика можно получить доступ к этой веб-странице с помощью простой и понятной структуры URL-адресов. Однако если пользователь щелкает гиперссылку на HTML-странице, веб-браузер будет использовать URL-адрес с параметрами строки запроса. Это не рекомендуется по нескольким причинам:
- Посетители веб-сайта увидят внутреннюю структуру URL-адресов, которую вы хотите скрыть с помощью правила переопределения URL-адресов.
- Та же страница будет доступна по нескольким URL-адресам, что не идеально подходит для поисковой оптимизации.
Самый простой способ исправить это — изменить HTML-страницу для использования простой структуры ссылок. Однако во многих случаях это невозможно. Например, если у вас уже есть сложное устаревшее веб-приложение или веб-приложение, в которое невозможно внести изменения, то исправление всех URL-ссылок в приложении может занять очень много времени или вообще не выполнимо.
В этом случае может помочь перезапись исходящего URL-адреса. Перезапись исходящего URL-адреса может исправлять ссылки на лету в ответе, созданном приложением.
Создание правила перезаписи для исходящего трафика
Теперь вы создадите правило перезаписи для исходящего трафика, которое изменяет URL-адреса в HTML-ответах. Правило изменит URL-адреса в следующем формате:
http://localhost/article.aspx?id=342&title=some-article-title
Эти URL-адреса будут переписаны следующим образом:
http://localhost/article/342/some-article-title
Вы создадите правило для исходящего трафика с помощью пользовательского интерфейса переопределения URL-адресов в диспетчере IIS.
Чтобы создать правило для исходящего трафика, выполните следующие действия.
- Открытие диспетчера IIS
- Выберите "Веб-сайт по умолчанию"
- В представлении функций выберите "Переопределение URL-адресов"
- В области Действия в правой части щелкните "Добавить правила...". В диалоговом окне "Добавление правил" выберите "Пустое правило" в категории "Правила для исходящего трафика" и нажмите кнопку ОК.
Теперь необходимо определить фактическое правило для исходящего трафика. В модуле переопределения URL-адресов 2.0 правило переопределения для исходящего трафика определяется путем указания следующих сведений:
- Имя правила.
- Необязательное условие, определяющее, следует ли применять это правило к ответу.
- Шаблон, используемый для сопоставления строки в ответе.
- Необязательный набор условий.
- Действие, выполняемое при совпадении шаблона и успешном выполнении всех проверок условий.
Именование правила
В текстовом поле "Имя" введите имя, которое будет однозначно идентифицировать правило, например"Переписать для очистки URL-адреса".
Определение предусловия
Предварительное условие используется для оценки того, следует ли выполнять оценку правил для исходящего трафика в ответе. Например, если правило изменяет html-содержимое, это правило должно оцениваться только для HTTP-ответов с заголовком типа контента, для которого задано значение "text/html". Оценка правил для исходящего трафика и перезапись содержимого — это ресурсоемкая операция, которая может негативно повлиять на производительность веб-приложения. Поэтому используйте предварительные условия, чтобы сузить случаи применения правил для исходящего трафика.
Так как создаваемое правило должно применяться только к HTML-ответам, необходимо определить предусловие, которое проверяет, эквивалентен ли тип содержимого заголовка HTTP-ответа "text/html".
Чтобы определить предусловие, выполните следующие действия.
В списке Предварительные условия выберите "<Создать новое предварительное условие>".
Откроется диалоговое окно редактора предварительных условий, где необходимо определить предусловие. Укажите параметры предусловия следующим образом:
Имя: "IsHTML"
Использование: "Регулярные выражения"
Нажмите кнопку "Добавить", чтобы открыть диалоговое окно "Добавить условие". В этом диалоговом окне укажите:
Входные данные условия: "{RESPONSE_CONTENT_TYPE}"
Проверьте, соответствует ли входная строка : "Соответствует шаблону"
Шаблон: "^text/html"
Нажмите кнопку ОК, чтобы сохранить предварительное условие и вернуться на страницу "Изменение правила".
Определение соответствующего область
Правило перезаписи для исходящего трафика может работать с содержимым заголовка HTTP или с содержимым текста ответа. Это правило должно заменить ссылки в содержимом ответа, поэтому в раскрывающемся списке "Область сопоставления" выберите "Ответ".
Определение фильтра тегов
Фильтры тегов используются для область сопоставления шаблона только с определенными элементами HTML, а не для оценки всего ответа по шаблону правила. Сопоставление шаблонов — это очень ресурсоемкая операция, и если весь ответ оценивается по шаблону, это может значительно замедлить время отклика веб-приложения. Фильтры тегов позволяют указать, что сопоставление шаблонов должно применяться только в содержимом определенных html-тегов, что значительно сокращает объем данных, которые должны быть оценены по шаблону регулярного выражения.
Чтобы определить фильтр тегов, разверните раскрывающийся список "Соответствие содержимого в: ", а затем выберите и проверка поле проверка "A (атрибут href)".
Это задает правило для применения шаблона только к значению атрибута href гиперссылки, как показано в следующем примере:
<a href="this string will be used for pattern matching">Some link</a>
Определение шаблона
В текстовом поле Pattern (Шаблон) введите следующую строку:
^/article\.aspx\?id=([0-9]+)(?:&|&)title=([_0-9a-z-]+)$
Эта строка является регулярным выражением, которое указывает, что шаблон будет соответствовать любой строке URL-адреса, удовлетворяющей следующим условиям:
- Начинается с последовательности символов "/article.aspx?".
- Содержит первый параметр строки запроса, имеющий числовое значение.
- Содержит второй параметр строки запроса, имеющий буквенно-цифровое значение.
Обратите внимание, что определенные части регулярного выражения находятся в круглых скобках. Эти круглые скобки создают группы записи, на которые позже можно ссылаться в правиле с помощью обратных ссылок. Кроме того, в большинстве случаев символ "&" кодируется в ответе в формате HTML, поэтому шаблон регулярного выражения должен учитывать это.
Определение действия
Выберите тип действия "Перезаписать" в поле группы "Действие". В текстовом поле "Значение" введите следующую строку:
/article/{R:1}/{R:2}
Эта строка указывает новое значение, на которое необходимо переписать адрес ссылки. Обратите внимание, что для значений параметров строки запроса выражение использует {R:1} и {R:2}, которые являются обратными ссылками на группы отслеживания, определенные в шаблоне правила с помощью круглых скобок.
Оставьте значения по умолчанию для всех остальных параметров. Страница свойств "Изменение правила" будет выглядеть следующим образом:
Сохраните правило, щелкнув действие "Применить" в правой части.
Просмотр правила перезаписи в файле конфигурации
Правила перезаписи хранятся либо в файлеaplicationHost.config , либо в файлахweb.config . Чтобы проверка конфигурацию только что созданного правила, откройте файл web.config, расположенный в
%SystemDrive%\inetput\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}&title={R:2}" />
</rule>
</rules>
<outboundRules>
<rule name="Rewrite to clean URL" preCondition="IsHTML">
<match filterByTags="A" pattern="^/article\.aspx\?id=([0-9]+)(?:&|&amp;)title=([_0-9a-z-]+)$" />
<action type="Rewrite" value="/article/{R:1}/{R:2}" />
</rule>
<preConditions>
<preCondition name="IsHTML">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
</preCondition>
</preConditions>
</outboundRules>
</rewrite>
Тестирование правила
Теперь можно проверить, правильно ли правило перезаписывает URL-адреса. Откройте веб-браузер и запросите следующий URL-адрес:
http://localhost/article/342/some-article-title
Вы увидите, что правило перезаписи для исходящего трафика изменило ссылку в HTML-ответе:
Теперь, если посетитель сайта щелкает эту ссылку, будет использоваться чистый формат URL-адреса, а внутреннее представление URL-адреса, используемое этой страницей, не будет раскрыто.
Сводка
В этом пошаговом руководстве вы узнали, как настроить правила перезаписи исходящего трафика в модуле переопределения URL-адресов 2.0 с помощью диспетчера IIS или вручную отредактировать web.config файл. Правила, созданные в этом пошаговом руководстве, продемонстрировали некоторые важные функции модуля переопределения URL-адресов 2.0, такие как перезапись исходящего трафика, предварительные условия и фильтры тегов.