Ласкаво просимо до dev.net.ua Увійти | Приєднатися | Допомога | Увійти Live ID
в Пошук

Владимир Лещинский

Блог посвящен самым последним разработкам компании Microsoft, облегчающим жизнь архитекторам и простым разработчикам и позволяющим делать приложения высокопроизводительными и масштабированными.

Что же ты делаешь с нами великий и могучий ... IIS 7 ? Или URLRewriter уже пришел...

Что же ты делаешь с нами великий и могучий ... IIS 7 ?

Или URLRewriter уже пришел...

Не знаю по какой причине, но практически ни в одном русскоязычном блоге, связанном с технологиями Microsoft, никто не вспомнил об этой новинке...

С проблемой, которую решает этот модуль, так часто приходиться сталкиваться, что ... я специально выделю несколько минут, чтобы рассказать о ней.

Часто разработчики сетовали на недостаток гибкого модуля, позволяющего легко переписывать URL, не дописывая бизнес логику в приложение. Также часто возникали сложности в случаях, когда заказчик требовал обрабатывать имена сабдоменов, как параметры страницы. Часто мы слышали и другие справедливые упреки заказчиков: "что это за страшный  URL", "мы хотим короткий дружественный URL"....

И нам разработчикам, в разные времена по-разному приходилось решать эту проблему.... 

Так решали ее в начале столетия ....

http://msdn.microsoft.com/en-us/library/ms972974.aspx,

http://www.codeproject.com/KB/aspnet/urlrewriter.aspx

Так боролись с ней с приходом ASP.NET 2.0 ...

http://quickstarts.asp.net/QuickStartv20/aspnet/doc/navigation/urlmapping.aspx ,

http://msdn.microsoft.com/en-us/library/system.web.configuration.urlmapping.aspx

И вот так ее можно решить сегодня ...

Теперь мы имеем возможность изменить URL до того, как он будет обработан IIS. Для этого нам достаточно установить специальный URL Rewrite модуль, предоставленный разработчиками компании Microsoft

Модуль поддерживает два режима: один из них основан на регулярных выражениях, другой, более простой (wildcard-based), основан на подстановке. Предложенное решение может работать с URL, заголовками HTTP и серверными переменными. Основная задача модуля состоит в том, чтобы переписывать URL, кроме того с помощью модуля есть возможность выполнить переадресацию, отправлять custom-ответы и обрывать запросы в зависимости от логики, описанной в правилах модуля.

Прежде, чем начинать работать с модулем, я рекомендую посмотреть специально выделенный раздел на  обучающем портале команды IIS - Using URL Rewrite Module, который содержит набор статей одного из Program-менеджеров команды IIS - Руслана Якушева.

Что же включено в модуль?

o Rules-based URL rewriting engine. Web-сервер и администраторы сайта могут использовать наборы rewrite правил, чтобы определять логику подмены URL.

o Regular expression pattern matching. Rewrite правила могут использовать ECMA-262 совместимый синтаксис регулярных выражений для построения шаблонов сравнений.

image

o Wildcard pattern matching. Rewrite правила могут использовать Wildcard синтаксис.

image

o Global and distributed rewrite rules. Глобальные правила используются, чтобы определить URL rewriting логику всего сервера. Эти правила определены в пределах applicationHost.config файла, и они не могут быть заменены или отключены на любых более низких уровнях конфигурации. Распределенные правила используются, чтобы определить URL rewriting логику, определенную для специфической области конфигурации. Этот тип правил может быть определен на любом уровне конфигурации  в web.config файлах.

image

o Access to server variables and http headers. Переменные сервера и заголовки HTTP предоставляют дополнительную информацию о текущем запросе HTTP. Эта информация может использоваться, при создании rewrite правил.

image

o Various rule actions. Вместо того, чтобы переписывать URL с повомощью правил, можно выполнить другие действия, такие как,  HTTP переадресация, блокировка запроса или отправка custom status code клиенту HTTP.

image

o Rewrite maps. По сути он представляет собой мапинг, который мы имели в ASP.NET 2.0. Работает он со статическими адресами, не используя динамическую замену с помощью регулярных выражений или wildcards подстановок.

<rewrite>
  <rewriteMaps>
    <rewriteMap name="SimpleRewrites">
      <add key="article1" value="article.aspx?id=1&amp;title=some-title" />
      <add key="some-title" value="article.aspx?id=1&amp;title=some-title"/>
      <add key="post/some-title.html" value="article.aspx?id=1&amp;title=some-title"/>
    </rewriteMap>
  </rewriteMaps>
</rewrite>

o UI for managing rewrite rules. Rewrite правила могут быть добавлены, удалены и отредактированы, используя "URL Rewrite Module" настройку в IIS менеджере.

image

o GUI tool for importing of mod_rewrite rules. URL rewrite модуль включает в себя GUI инструментарий для конвертации rewrite правил из mod_rewrite формата в IIS формат. 

image

Скачать инсталляцию модуля можно по адресам:

Microsoft URL Rewrite Module for IIS 7.0 CTP1 (x86),

Microsoft URL Rewrite Module for IIS 7.0 CTP1 (x64).

Все, кому нравится менять настройки вручную, имеют для этого прекрасную возможность, конфигурируя напрямую 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}&amp;id={R:1}"/>
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

Те же, кто не страдает комплексом "юникс администратора", получает интуитивно понятный графический интерфейс, помогающий настроить любые правила URL реврайтинга.

image image

На сайте команды IIS есть ветка в форуме, посвященная этому модулю http://forums.iis.net/1152.aspx. Ветка пока не очень большая, но я надеюсь на то, что этот "недостаток" будет исправлен, как только Вы попробуете этот замечательный модуль...

 

Ссылки, косвенно касающиеся модуля и людей, упоминающихся в обзоре:

http://www.gotdotnet.ru/Channel9/552493.aspx
http://blogs.iis.net/thomad/archive/2008/05/30/now-available-url-rewriter-tech-preview-1.aspx
http://blogs.iis.net/carlosag/archive/2008/05/30/url-rewrite-technical-preview-1-available.aspx
http://blogs.iis.net/bills/archive/2008/05/31/urlrewrite-module-for-iis7.aspx

Опубліковані Tuesday, June 17, 2008 7:12 PM від Leshchinsky
Помічено як: , ,

Коментарі

 

Brand сказав:

Можно ли расширять Url Rewrite программно?

Бывают сценарии когда регулярных выражений недостаточно и требуется более сложная логика Rewrite

June 17, 2008 10:58 AM
 

Leshchinsky сказав:

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

Приведи пожалуйста пример сценария, когда регулярных выражений не достаточно ?

Функционал модуля не ограничен регулярными выражениями - он намного шире...

June 17, 2008 12:22 PM
 

Brand сказав:

У меня решение о том куда перенаправить запрос может быть принято только на основе данных из БД.

Пока сделал HTTP-модуль который это и делает, но хотелось более цивилизованый способ, почему-то думал что с этой надстройкой будет и такая возможность.

June 17, 2008 2:47 PM
 

kosinsky сказав:

Главная фича, этой штуки что он умеет конвертировать правила Apache mod_Rewrite в свой формат. И это облегчит миграцию с LAMP на Windows+IIS

June 17, 2008 11:49 PM
 

Leshchinsky сказав:

Я связался С Русланом Якушевым и переадресовал вопрос о поддержке расширения URL Rewrite модуля и вот что он мне ответил ...

"..... Пока что модуль не поддерживает программные расширения, и на данный момент нет планов, для такой поддержки в первой версии, которая будет выпущена осенью этого года.

Хотя мы слышали несколько подобных запросов. Основной сценарий, где хотят это использовать – это хранение rewrite logic в базе данных. Мы определенно планируем добавить программные расширения в последующих версиях. .... "

Вот так. Так что придется подождать .... Но если запросов будет больше приоритет этой хотелки я думаю возрастет ...

June 23, 2008 10:54 AM
 

Brand сказав:

Большое спасибо, Владимир.

Прийдется дальше все писать на обычных HttpModule :)

June 24, 2008 10:07 AM
 

Leshchinsky сказав:

Рекомендую посмотреть на еще одно решение с codeplex.com ....

http://www.codeplex.com/urlrewriter

June 25, 2008 7:46 AM
 

Podlipensky сказав:

Ха! Интересно удастся ли мне переубедить заказчика перейти на сервер с новым IIS... Просто буквально на днях получил подобный таск по одному из проектов. Спасибо за пост!

June 25, 2008 7:52 AM
 

Oleg Repin сказав:

Что это за модуль? Какие проблемы позволяет решить? О нем уже писалось раньше, и чтобы вспомнить, с чем

October 2, 2008 2:39 PM
Анонімні коментарі деактивовані. Увійдіть або Зареєструйтесь щоб мати доступ до ресурсів Спільноти.