Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Этот раздел документации относится к модулю переопределения URL-адресов версии 2.0 для IIS 7.
В этом пошаговом руководстве описано, как создать и проверить правило перезаписи исходящего трафика для модуля перезаписи URL-адресов 2.0.
Необходимые условия
В этом пошаговом руководстве требуются следующие предварительные требования:
- IIS 7 или более поздней версии с включенной службой ролей ASP.NET;
- Установлен выпуск модуля URL Rewrite 2.0 RC.
Настройка тестовой веб-страницы
Чтобы продемонстрировать, как работает модуль перезаписи URL-адресов 2, вы будете использовать простую страницу 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>
Определение шаблона
В текстовом поле "Шаблон" введите следующую строку:
^/article\.aspx\?id=([0-9]+)(?:&|&)title=([_0-9a-z-]+)$
Эта строка представляет собой регулярное выражение, указывающее, что шаблон будет соответствовать любой строке URL-адреса, которая соответствует следующим условиям:
- Начинается с последовательности символов "/article.aspx?".
- Содержит первый параметр строки запроса, имеющий числовое значение.
- Содержит второй параметр строки запроса, имеющий буквенно-цифровое значение.
Обратите внимание, что определенные части регулярного выражения находятся в скобках. Эти круглые скобки создают группы захвата, на которые можно ссылаться позже в правиле с помощью обратных ссылок. Кроме того, в большинстве случаев символ "&" закодирован в ответе, поэтому шаблон регулярного выражения должен учитывать это.
Определение действия
Выберите тип действия "Перезаписать" в поле группы "Действие". В текстовом поле "Значение" введите следующую строку:
/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 — такие как исходящее переписывание, предварительные условия и фильтры тегов.