Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом пошаговом руководстве описаны различные типы правил, поддерживаемых модулем перезаписи URL-адресов, и вы узнаете, как настроить глобальные и распределенные правила перезаписи.
Основные сведения
Правила глобальной перезаписи используются для определения логики перезаписи URL-адресов на уровне сервера. Эти правила определены в файле applicationHost.config, и они не могут быть переопределены или отключены на всех более низких уровнях конфигурации, таких как сайт или виртуальный каталог. Глобальные правила всегда работают с абсолютным URL-адресом (то есть запрашиваемым универсальным кодом ресурса (URI) без имени сервера. Например, если запрос был выполнен на http://localhost/directory1/directory2/index.html, модуль перезаписи URL-адресов передает "directory1/directory2/index.html" как входные данные глобальному правилу.
Правила распределенной перезаписи используются для определения логики перезаписи URL-адресов, характерной для конкретной области конфигурации. Распределенные правила можно определить на любом уровне конфигурации (за исключением файла) с помощью web.config файлов. Локальные правила всегда работают с URL-адресами относительно расположения файла Web.config, в котором они определены. Например, если запрос был выполнен к http://localhost/directory1/directory2/index.html и правило перезаписи было определено в файле Web.config, расположенном в каталоге1, модуль перезаписи URL-адресов передает "directory2/index.html" в качестве входных данных в это правило.
Глобальный набор правил всегда оценивается сначала, и после этого распределённый набор правил будет оцениваться с использованием строки URL, созданной глобальным набором правил.
Необходимые условия
В этом пошаговом руководстве требуются следующие предварительные требования:
- IIS 7.0 или более поздней версии с включенной службой ролей ASP.NET
- Установлена версия перезаписи URL-адресов для выхода Go Live
Настройка пошагового сценария
Чтобы продемонстрировать, как использовать глобальные и локальные правила, мы реализуем распространенный сценарий сопоставления поддомов с каталогами. Это позволит нам использовать поддомены для доступа к содержимому в разных каталогах на нашем сайте. Например, пользователи смогут перейти на http://blog.mysite.com вместо http://mysite.com/blog, или на http://forum.mysite.com вместо http://mysite.com/forum.
Чтобы настроить сценарий, выполните следующие действия.
Создайте две папки с именем "блог" и "форум" в
%SystemDrive%\inetpub\wwwroot\папке.Скопируйте следующий код asp.net и поместите его в папку
%SystemDrive%\inetpub\wwwroot\blogв файл с именем 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> <p>This page is located in blog subdomain.</p> <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>Скопируйте следующий код asp.net и поместите его в папку
%SystemDrive%\inetpub\wwwroot\forumв файле с именем forum.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> <p>This page is located in forum subdomain.</p> <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>Откройте файл "hosts", расположенный по
%SystemDrive%\windows\system32\drivers\etc\адресу и добавьте в него следующие две строки:127.0.0.1 forum_localhost 127.0.0.1 blog_localhostПосле добавления этих строк откройте веб-браузер и перейдите по адресу http://blog_localhost/blog/article.aspx, затем по адресу http://forum_localhost/forum/forum.aspx, и убедитесь, что страницы отображаются корректно в браузере.
Создание глобального правила перезаписи
Сначала мы создадим глобальное правило перезаписи, которое перезаписывает URL-адрес на основе заголовка узла. Например, если запрос был выполнен к http://blog_localhost/article.aspx, правило изменит путь URL на "/blog/article.aspx".
Чтобы создать глобальное правило с помощью пользовательского интерфейса перезаписи URL-адресов в диспетчере IIS, выполните следующие действия.
- Перейти к диспетчеру IIS
- В представлении дерева навигации выберите узел сервера.
- В представлении компонентов щелкните "Модуль переопределения URL-адресов"
- В области "Действия" нажмите кнопку "Добавить правила..."
- В диалоговом окне "Добавить правила" выберите "Пустое правило" и нажмите кнопку "ОК":
Теперь необходимо определить фактическое правило перезаписи. В модуле переопределения URL-адресов правило задается, определяя четыре основных элемента информации.
- Имя правила
- Шаблон для сопоставления строки URL-адреса
- Необязательный набор условий
- Действие, которое нужно выполнить, если шаблон был сопоставлен и все условия выполнены.
Именование правила
В текстовом поле "Имя" введите имя, которое будет однозначно определять правило, например "Сопоставление поддомена".
Определение шаблона
В текстовом поле "Шаблон" введите следующую строку:
(.*)
Эта строка представляет собой регулярное выражение, указывающее, что шаблон будет соответствовать любой строке URL-адреса, включая пустую строку, и она будет записывать соответствующую строку в обратной ссылке.
Определение условия
Нажмите кнопку "Добавить условия":
Нажмите кнопку "Добавить...", чтобы открыть диалоговое окно для определения условий.
В поле "Условие ввода:" введите эту строку: "{HTTP_HOST}". Это настраивает модуль перезаписи URL-адресов для использования значения заголовка узла http-запроса в качестве входных данных для условия.
В раскрывающемся списке выберите "Соответствует шаблону".
В текстовом поле "Шаблон" введите "^([^_]+)_[^_]+". Это регулярное выражение будет использоваться для сопоставления созданных доменов (blog_localhost и forum_localhost) и захватит часть строки перед символом "_" в обратную ссылку. Например, для строки "blog_localhost", она будет хранить "блог" в обратной ссылке.
После указания всех свойств диалоговое окно условия должно выглядеть следующим образом:
Нажмите кнопку "ОК", чтобы сохранить условие и вернуться к пользовательскому интерфейсу "Добавить правило".
Определение действия
Так как создаваемое правило должно переписать URL-адрес, выберите тип действия "Перезаписать" в поле группы "Действие". В текстовом поле "Переписать URL-адрес:" введите следующую строку:
{C:1}/{R:1}
Эта строка указывает, на какой URL-адрес ввода должен быть перезаписан. Обратная ссылка на условие {C:1} используется в качестве имени папки, а затем все, что было записано в шаблоне правила, сохраняется с помощью обратной ссылки на правило {R:1}.
Оставьте значения по умолчанию для всех остальных параметров. Пользовательский интерфейс "Изменить правило" должен выглядеть следующим образом:
Сохраните правило, нажав кнопку "Применить" в правой части.
Чтобы понять, как это правило будет применяться, давайте рассмотрим шаги, выполняемые модулем перезаписи URL-адресов, когда HTTP-клиент запрашивает этот URL-адрес:
http://blog_localhost/article.aspx?id=323:
- Модуль переписывания URL-адресов передает "article.aspx?id=323" в качестве входного URL-адреса в правило, успешно сопоставляет его с шаблоном правила и включает его в обратную ссылку на правило {R:1}
- Значение заголовка хоста ("blog_localhost") успешно сопоставляется с регулярным выражением "^([^_]+)_[^_]+" и в результате "блог" фиксируется в обратной ссылке на условие {C:1}
- В соответствии со строкой подстановки {C:1}/{R:1} URL-адрес перезаписывается на "blog/article.aspx?id=323".
Тестирование правила
Чтобы проверить, что правило корректно переписывает URL-адреса, откройте браузер и запросите следующий URL-адрес:
http://blog_localhost/article.aspx?id=123
Вы увидите, что модуль перезаписи URL-адресов изменил URL-адрес и открыл страницу Article.aspx в каталоге "блог". Изменения, внесенные модулем перезаписи URL-адресов, были основаны на сведениях, извлеченных из заголовка узла.
Аналогично, когда вы запрашиваете http://forum_localhost/forum.aspx?id=345, URL-адрес будет перезаписан на /forum/forum.aspx?id=345.
Создание распределенных правил
Глобальное правило, которое мы только что создали, использовалось для сопоставления запроса с папкой на основе сведений, извлеченных из заголовка узла. Теперь мы создадим распределенные правила, которые позволят нам иметь URL-адрес без параметров строки запроса. Распределенные правила будут принимать в качестве входных данных URL-адрес, который уже был изменен глобальным правилом, и выполнять дополнительные изменения с ним. В частности:
- Правило перезаписи в папке "блог" перезаписывает путь URL-адреса с "article/234/some-title" на "article.aspx?id=234&title=some-title"
- Правило перезаписи в папке "форум" перезаписывает путь URL-адреса с "topic/123/some-topic-title" на "forum.aspx?topic=some-topic-title&id=123"
Локальные правила можно создавать с помощью диспетчера IIS или редактирования web.config файлов. Для демонстрационных целей мы создадим правила, изменив файлы web.config вручную.
Чтобы создать правила распределенной перезаписи, выполните следующие действия.
Создайте пустой файл web.config в
%SystemDrive%\inetpub\wwwroot\**blog**папке. Откройте его в текстовом редакторе и вставьте в него следующий XML-код:<?xml version="1.0" encoding="UTF-8"?> <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> </system.webServer> </configuration>Создайте пустой файл web.config в
%SystemDrive%\inetpub\wwwroot\**forum**папке. Откройте его в текстовом редакторе и вставьте в него следующий XML-код:<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="Rewrite to forum.aspx"> <match url="^topic/([0-9]+)/([_0-9a-z-]+)"/> <action type="Rewrite" url="forum.aspx?topic={R:2}&id={R:1}"/> </rule> </rules> </rewrite> </system.webServer> </configuration>
Тестирование глобальных и распределенных правил
Чтобы проверить правильности работы всех правил, откройте веб-браузер и отправьте запрос http://blog_localhost/article/234/some-title. Ответ в браузере должен указывать, что URL-адрес был сначала изменен глобальным правилом, а затем был дополнительно изменен распределенным правилом.
Аналогичным образом, при запросе http://forum_localhost/topic/123/some-topic-titleвы увидите, что модуль перезаписи URL-адресов изменяет запрошенную строку URL-адреса на "/forum/forum.aspx?topic=some-topic-title&id=123".
Сводка
В этом руководстве вы реализовали сценарий сопоставления поддомен с помощью глобального правила, а затем использовали распределенные правила, чтобы включить понятные URL-адреса для веб-страниц в этих папках.