Что же ты делаешь с нами великий и могучий ... 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 совместимый синтаксис регулярных выражений для построения шаблонов сравнений.
o Wildcard pattern matching. Rewrite правила могут использовать Wildcard синтаксис.
o Global and distributed rewrite rules. Глобальные правила используются, чтобы определить URL rewriting логику всего сервера. Эти правила определены в пределах applicationHost.config файла, и они не могут быть заменены или отключены на любых более низких уровнях конфигурации. Распределенные правила используются, чтобы определить URL rewriting логику, определенную для специфической области конфигурации. Этот тип правил может быть определен на любом уровне конфигурации в web.config файлах.
o Access to server variables and http headers. Переменные сервера и заголовки HTTP предоставляют дополнительную информацию о текущем запросе HTTP. Эта информация может использоваться, при создании rewrite правил.
o Various rule actions. Вместо того, чтобы переписывать URL с повомощью правил, можно выполнить другие действия, такие как, HTTP переадресация, блокировка запроса или отправка custom status code клиенту HTTP.
o Rewrite maps. По сути он представляет собой мапинг, который мы имели в ASP.NET 2.0. Работает он со статическими адресами, не используя динамическую замену с помощью регулярных выражений или wildcards подстановок.
<rewrite>
<rewriteMaps>
<rewriteMap name="SimpleRewrites">
<add key="article1" value="article.aspx?id=1&title=some-title" />
<add key="some-title" value="article.aspx?id=1&title=some-title"/>
<add key="post/some-title.html" value="article.aspx?id=1&title=some-title"/>
</rewriteMap>
</rewriteMaps>
</rewrite>
o UI for managing rewrite rules. Rewrite правила могут быть добавлены, удалены и отредактированы, используя "URL Rewrite Module" настройку в IIS менеджере.
o GUI tool for importing of mod_rewrite rules. URL rewrite модуль включает в себя GUI инструментарий для конвертации rewrite правил из mod_rewrite формата в IIS формат.
Скачать инсталляцию модуля можно по адресам:
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}&id={R:1}"/>
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
Те же, кто не страдает комплексом "юникс администратора", получает интуитивно понятный графический интерфейс, помогающий настроить любые правила URL реврайтинга.
На сайте команды 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