Статьи

Заставляем IIS 6.0 играть с перезаписью Url

Одна из тем, которая часто встречается на форуме .NET SitePoint: «Как мне переписать URL-адреса в .NET?» Ответ на этот вопрос относительно прост, как только вы попадаете в конвейер ASP.NET. К сожалению, учитывая текущие версии IIS, добраться до этого конвейера намного сложнее, чем следовало бы. IIS действительно предпочитает работать с известными расширениями, а не с необычными сопоставлениями. Документация для обхода этого ограничения в лучшем случае редкая.

Получение картографических данных IIS, которые он не хочет отображать

Прежде всего, среди новых функций IIS 7 — возможность внедрять HttpHandlers и HttpModules по любому запросу, поступающему на сервер. Есть причина, по которой это является хедлайнером — заставить IIS 6 правильно отображать переписанные URL-адреса — сам по себе трюк. IIS 6.0 и более ранние версии действительно очень хотят взять расширение из запроса и отобразить его в соответствующий обработчик для обработки. Итак, если вы хотите, чтобы ваши URL-адреса были похожи на http://www.example.com/products/fluffy-bunny-slippers/, вам придется немного поработать. Варианты включают в себя:

  1. Пусть IIS делает то, что хочет IIS.

    Бывают моменты, когда лучше всего знать, как работает основная технология. Поэтому просто измените ваши страницы так, чтобы они выглядели как страницы, а не папки — например, http://www.example.com/products/fluffy-bunny-slippers.aspx . URL почти так же взломан, как и в предыдущем примере, но требует значительно меньшего количества разработки. Ваше приложение не требует перенастройки на уровне IIS для правильного отображения объектов. Эта тактика также будет работать в сценариях общего хостинга, где у вас нет возможности вносить значительные изменения в конфигурацию IIS.

  2. Используйте модуль ISAPI или фильтр

    Модули и фильтры ISAPI находятся в IIS и обрабатывают запросы до того, как они попадают в конвейер ASP.NET. Два варианта — довольно дешевый IISRewrite и бесплатный ISAPI Rewrite Filter . Оба используют грамматику, в целом напоминающую, но не идентичную, mod_rewrite. Это, вероятно, самое чистое решение, но оно также требует ситуации с хостингом, которая позволяет вносить значительные изменения в конфигурацию IIS.

  3. Используйте подстановочный знак.

    IIS 6.0 поддерживает сопоставления с подстановочными знаками, когда все запросы к данному веб-сайту сопоставляются с данным обработчиком. Хотя это звучит как серебряная пуля, у нее есть много минусов. Вероятно, самым большим является то, что запросы на статические ресурсы будут исправляться через конвейер ASP.NET. Более того, если вы используете какие-либо типы контента для эшторики, вам необходимо убедиться, что им назначен правильный обработчик в вашем приложении или в файле web.config сервера.

  4. Используйте пользовательскую страницу ASP.NET 404.

    Если ваша страница 404 является страницей ASP.NET, то она будет запускать весь конвейер рендеринга, включая вызов ваших пользовательских HttpModules. Таким образом, любой несуществующий файл все равно позволит вашей программе ввести несколько слов. Хотя это скорее сравнительно гетто, это правильная тактика для ситуаций, когда нельзя изменить значительные биты IIS или просто использовать URL-адреса .aspx. К сожалению, большинство совместно используемых хостов не позволяют использовать один или два варианта выше, поэтому сегодня этот наименьший общий знаменатель довольно часто используется в приложениях.

Теперь, когда у нас есть сложная задача — заставить IIS передавать запросы в ASP.NET, — мы можем приступить к переписыванию URL-адресов. К счастью, это относительно легко и заметно более вменяемым, чем выше. Вместо того, чтобы повторять мудрость взаимосвязей, я дам вам несколько ключевых ссылок:

  1. Отличный пост Скотта Гатри о переписывании URL в .NET . Обратите особое внимание на последние несколько пунктов; они охватывают несколько крупных ошибок в переписывании URL .NET.
  2. UrlRewritingNet.UrlRewrite — довольно хорошая библиотека .NET 2.0 для работы с вашими потребностями в переписывании URL.
  3. UrlRewriter.Net — это еще одна неплохая библиотека с открытым исходным кодом .NET 1.1 / 2.0 для обработки механики ваших потребностей в переписывании URL.
  4. Скотт Уотермасиск , человек, который принес вам .TEXT и Сервер совместной работы , публикует эту очень полезную статью о довольно существенной ошибке при переписывании собственных URL .NET.
  5. Документация MSDN для HttpContext.RewritePath , «ключевого» метода в этом начинании.

Итак, возьмите под свой контроль IIS и сделайте их URL более дружелюбными!

пнуть его на DotNetKicks.com