Переписывание URL HttpModule с использованием IIS6 без URL-адресов без расширений - PullRequest
3 голосов
/ 12 февраля 2009

Мы используем модуль URL-перезаписи Intelligencia для asp.net с версией 2.0 платформы и IIS6. Наши URL обычно не имеют расширения.

Я понимаю, что IIS6 не может реально справиться с этой ситуацией без общего группового символа (который вызывает другие проблемы).

Однако это работает! Иногда. В других случаях (например, на компьютере одного разработчика и на моем компьютере, когда я указываю другой виртуальный каталог на приложение) это не так. Под «не работает» я подразумеваю, что настроенные HttpModules никогда не получают удар.

Может кто-нибудь объяснить это?

Спасибо.

Ответы [ 4 ]

4 голосов
/ 12 февраля 2009

Получается, что происходило следующее:

  • приходит запрос (скажем) http://website/products/productid
  • IIS не может найти это, поэтому мы получаем 404
  • случайно у нас есть настроенная страница ошибки, установленная в IIS для 404 с
  • эта страница с ошибкой вставляет ссылочный URL в конце страницы 404 error.aspx
  • таким образом, мы получаем перенаправление на asp.net по направлениям:

    http://website/error.aspx?404;http://website/products/productid

  • наши регулярные выражения перезаписи URL теперь были настроены таким образом, что они отбрасывали бит error.aspx и обрабатывали http://website/products/productid, как если бы это был фактический URL

  • так asp.net отображает http://website/product.aspx?id=productid в соответствии с запросом!

Полагаю, это может оказаться полезным для кого-то, но мы переходим к фильтру isapi. Одно замечание: по умолчанию это приведет к тесной петле перенаправлений!

2 голосов
/ 12 февраля 2009

Если вы запускаете сайт с помощью веб-сервера разработки Visual Studio, все запросы будут обрабатываться asp.net, поэтому ваш HttpModule будет работать.

На IIS6 этого не должно происходить, если он не настроен для пересылки запросов на asp.net.

1 голос
/ 12 февраля 2009

Вы уверены, что, когда «это работает», вы не работаете на веб-сервере разработки Cassini, включенном в VS.NET? Потому что под Кассини работают подстановочные знаки без расширения, что может быть очень запутанным, если не сказать больше.

0 голосов
/ 11 декабря 2011

Если вы используете IIS6 с ASP.net 4.0, вы должны указать и зарегистрировать модули следующим образом:

<system.web>
<httpModules>
      <add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/>

не

<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
      <add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/>
</modules>

...