Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом пошаговом руководстве описаны различные типы правил, поддерживаемых модулем перезаписи 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 файле, расположенном в каталоге directory1, модуль перезаписи URL-адресов будет передавать "directory2/index.html" в качестве входных данных для этого правила.
Глобальный набор правил всегда вычисляется сначала, а после этого распределенный набор правил будет оцениваться с помощью строки URL-адреса, созданной глобальным набором правил.
Предварительные требования
Для этого пошагового руководства требуются следующие предварительные требования.
- IIS 7.0 или более поздней версии с включенной службой ASP.NET ролей
- Установлен выпуск Go Live для перезаписи URL-адресов
Настройка сценария пошагового руководства
Чтобы продемонстрировать, как использовать глобальные и локальные правила, мы реализуем распространенный сценарий сопоставления поддомов с каталогами. Это позволит нам использовать вложенные домены для доступа к содержимому в разных каталогах на нашем сайте. Например, пользователи смогут переходить http://blog.mysite.com
http://mysite.com/blog
по вместо или к http://forum.mysite.com
вместо http://mysite.com/forum
.
Чтобы настроить сценарий, выполните следующие действия.
Создайте в папке две папки с именами "blog" и "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-адреса, включая пустую строку, и будет захватывать соответствующую строку в обратной ссылке.
Определение условия
Нажмите кнопку "Добавить условия":
Нажмите кнопку "Добавить..." чтобы открыть диалоговое окно для определения условий.
Для параметра "Condition input:" введите эту строку: "{HTTP_HOST}". Модуль переопределения URL-адресов настраивается для использования значения заголовка узла HTTP-запроса в качестве входных данных для условия.
В раскрывающемся списке выберите "Соответствует шаблону".
В текстовом поле "Шаблон" введите "^([^_]+)_[^_]+". Это регулярное выражение будет использоваться для сопоставления созданных доменов (blog_localhost и forum_localhost) и будет записывать часть строки перед символом "_" в обратную ссылку. Например, для строки "blog_localhost", она будет хранить "blog" в обратной ссылке.
После указания всех свойств диалоговое окно условия должно выглядеть следующим образом:
Нажмите кнопку ОК, чтобы сохранить условие и вернуться к пользовательскому интерфейсу "Добавить правило".
Определение действия
Так как создаваемое правило предназначено для перезаписи URL-адреса, выберите тип действия "Перезаписать" в поле группа "Действие". В текстовом поле "Переписать URL-адрес:" введите следующую строку:
{C:1}/{R:1}
Эта строка указывает, в какой url-адрес должен быть перезаписан входной 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") успешно сопоставляется с регулярным выражением "^([^_]+)_[^_]+" и в результате "blog" записывается в условие back-reference {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 в каталоге blog. Изменения, внесенные модулем переопределения URL-адресов, основывались на информации, извлеченной из заголовка узла.
Аналогичным образом при запросе http://forum_localhost/forum.aspx?id=345
URL-адрес будет переписан на /forum/forum.aspx?id=345.
Создание распределенных правил
Только что созданное глобальное правило использовалось для сопоставления запроса с папкой на основе сведений, извлеченных из заголовка узла. Теперь мы создадим распределенные правила, которые позволят нам иметь URL-адреса без параметров строки запроса. Распределенные правила принимают в качестве входных данных URL-адрес, который уже был изменен глобальным правилом, и в него будут вноситься дополнительные изменения. В частности:
- Правило перезаписи в папке blog перезаписывает путь URL-адреса со "article/234/some-title" на "article.aspx?id=234&title=some-title".
- Правило перезаписи в папке forum перезаписывает путь 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-адреса для веб-страниц в этих папках.