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


Настройка заголовков HTTP-запросов и переменных сервера IIS

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

Этот раздел документации относится к модулю переопределения URL-адресов версии 2.0 для IIS 7.

В этом пошаговом руководстве описано, как использовать модуль переопределения URL-адресов версии 2.0 для задания заголовков HTTP-запросов и переменных сервера IIS.

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

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

  1. IIS 7.0 или более поздней версии с включенной службой ASP.NET ролей
  2. Установленный модуль переопределения URL-адресов 2.0

Настройка сценария пошагового руководства

Чтобы продемонстрировать использование модуля переопределения URL-адресов 2.0 для задания заголовков HTTP и переменных сервера IIS, мы реализуем сценарий, в котором заголовок ФАЙЛА cookie HTTP в запросе задается на основе запрошенного URL-адреса. Например, предположим, что у вас есть веб-приложение, которое обслуживает локализованные веб-страницы. Веб-приложение определяет язык ответа на основе ФАЙЛА COOKIE HTTP в запросе. Проблема с этим подходом заключается в том, что поисковые системы не будут индексировать локализованное содержимое этого приложения, так как поисковые системы-обходчики не используют файлы cookie HTTP и, следовательно, веб-приложение будет обслуживать только содержимое на языке по умолчанию. Чтобы устранить эту проблему, вы решили добавить сведения о языке как часть URL-адреса, например , http://www.contoso.com/default.aspxа затем используйте модуль перезаписи URL-адресов 2.0, чтобы задать файл cookie, который веб-приложение ожидает, чтобы определить язык ответа. Кроме того, необходимо задать другую переменную сервера с именем ORIGINAL_URI , которая будет содержать первоначально запрошенную строку URI.

Чтобы настроить сценарий пошагового руководства, скопируйте следующий код ASP.NET и поместите его в %SystemDrive%\inetpub\wwwroot\ папку в файл с именем language.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 v2 Test - Setting Server Variables</title>
</head>
<body>
 <h1>Setting HTTP request header and a server variable with URL Rewrite Module v2</h1>
 <p>The value of the Language cookie is <strong><%=( Request.Cookies["Language"] != null ) ? Request.Cookies["Language"].Value : "Cookie not set" %></strong></p>
 <p>The originally requested URI is <strong><%= HttpUtility.HtmlEncode( Request.ServerVariables["ORIGINAL_URI"] ) %></strong></p>
</body>
</html>

После копирования этого файла перейдите по адресу http://localhost/language.aspx и проверка, что страница была правильно отображена в браузере.

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

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

http://localhost/<language>/anyfile.aspx
будет перезаписан как:
http://localhost/anyfile.aspx

Правило перезаписи также задаст две переменные сервера IIS:

  • HTTP_COOKIE
  • ORIGINAL_URI

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

Откройте диспетчер IIS, выберите "Веб-сайт по умолчанию" в представлении в виде дерева слева, а затем откройте функцию "Переопределение URL-адресов".

Снимок экрана: начальный экран веб-сайта по умолчанию диспетчера I S Manager с фокусом на параметре переопределения U R L.

Разрешение изменения переменных сервера

По умолчанию правила распределенной перезаписи (т. е. правила, определенные для определенных сайтов или веб-приложений) не могут задавать или изменять переменную сервера IIS, если только эта переменная не будет добавлена в список "Разрешено". В этом пошаговом руководстве необходимо добавить следующие две переменные сервера в список разрешенных серверных переменных:

  • HTTP_COOKIE
  • ORIGINAL_URI

Примечание

Список "Разрешенные серверные переменные" неприменим к глобальным правилам, определенным на уровне сервера. Нет необходимости добавлять переменную сервера в список "Разрешено", если эта переменная сервера задается с помощью глобального правила перезаписи.

Выберите "Просмотр переменных сервера..." действие из области "Действия":

Снимок экрана: экран перезаписи U R L с фокусом на параметре

Используйте действие "Добавить...", чтобы добавить переменные сервера HTTP_COOKIE и ORIGINAL_URI в список "Разрешенные серверные переменные".

Снимок экрана: диалоговое окно

После обновления списка "Разрешенные серверные переменные" нажмите кнопку "Вернуться к правилам", чтобы вернуться к представлению списка правил.

Определение карты перезаписи

Следующим шагом является определение карты перезаписи, которая будет использоваться для сопоставления части URL-адреса, представляющей язык с идентификатором языкового стандарта, который будет сохранен правилом перезаписи в заголовке ФАЙЛА cookie HTTP.

Выберите "Просмотр перезаписи карт..." действие в области "Действия":

Снимок экрана: экран перезаписи U R L с фокусом на параметре

Нажмите кнопку "Добавить карту переопределения..." и укажите имя карты как "Языки":

Снимок экрана: диалоговое окно

Эта карта определит сопоставления между частью URL-адреса, представляющей язык, и идентификатором языкового стандарта, который будет использоваться при настройке файла cookie HTTP-запроса. Щелкните "Изменить параметры карты..." действие, указывающее значение по умолчанию, используемое при отсутствии сопоставления. Введите "en_US" в качестве значения по умолчанию:

Снимок экрана: диалоговое окно

Закройте диалоговое окно и используйте команду "Добавить запись сопоставления..." действие для добавления следующих сопоставлений:

Исходное значение: Новое значение:
fr-fr fr_FR
de-de de_DE
ru-ru ru_RU

Определение правила перезаписи

Наконец, вы создадите правило перезаписи, которое задает переменные сервера с помощью схемы перезаписи, определенной ранее.

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

Снимок экрана: экран

  • Имя правила: "set server variables"

  • Запрошенный URL-адрес: "Соответствует шаблону"

  • Использование регулярных выражений

  • Шаблон: "^([a-z]{2}-[a-z]{2})/(.*)"

  • Условия:

    • Входные данные: "{Языки:{R:1}}"
    • Тип: "Соответствует шаблонам"
    • Шаблон: "(.+)"
  • Действие:

    • Тип: "Переписать"
    • Перезаписать URL-адрес: "{R:2}"

Шаблон правила соответствует любому URL-пути, который содержит языковой сегмент (например, http://www.contoso.com/de-de/default.aspx). Он также фиксирует языковой сегмент и оставшуюся часть ПУТИ URL-адреса в обратных ссылках правила, чтобы их можно было повторно использовать позже в правиле. Условие правила использует ранее захваченный сегмент языка в качестве ключа подстановки, который передается в карту перезаписи "Языки". Результат поиска карты хранится в обратной ссылке условия. Действие правила перезаписывает URL-адрес, чтобы не содержать языковой сегмент.

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

Снимок экрана: диалоговое окно

  • Имя: HTTP_COOKIE, Значение: Language={C:1}
  • Имя: ORIGINAL_URI, Значение: http://{HTTP_HOST}{REQUEST_URI}

Файл cookie HTTP устанавливается с помощью обратной ссылки условия, которая содержит идентификатор языкового стандарта, полученный из карты перезаписи "Языки". Значение для переменной сервера ORIGINAL_URI создается с помощью серверных переменных {HTTP_HOST} и {REQUEST_URI}.

Нажмите кнопку "ОК", чтобы закрыть диалоговое окно, а затем нажмите кнопку "Применить" в области "Действия" справа, чтобы сохранить правило.

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

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

http://localhost/fr-fr/language.aspx

Снимок экрана: тестовая веб-страница модуля переопределения U R L версии 2 с фокусом на панели U R L. Файл cookie языка имеет значение F R подчеркивания F R R.

Вы увидите, что правило перезаписи задало файл cookie "Язык" в соответствии с запрошенным URL-адресом. Кроме того, исходная строка URL-адреса была доступна для страницы ASP.NET с помощью серверной переменной "ORIGINAL_URI".