httpModule для 404 - PullRequest
       37

httpModule для 404

0 голосов
/ 29 сентября 2010

Я создал httpModule для обработки переназначений URL, и он отлично работает в моей тестовой системе. Запрос на www.mydomain.com/Some_Fancy_URL переписывается на www.mydomain.com/some.aspx?fancy=23 и т. Д.

При развертывании на реальном веб-сайте я получаю страницу IIS 404 по умолчанию.

После проведения некоторых онлайн-исследований может показаться, что мне нужно настроить «Сопоставление по подстановочным знакам» в IIS 6, чтобы получить запрос после IIS и в мой модуль httpModule. Проблема в том, что сайт размещен на общем сервере, поэтому интернет-провайдеру не удастся внести это изменение.

У меня вопрос: не могу ли я использовать httpHandler, чтобы сообщить IIS, как я хочу обрабатывать эти запросы? Например:

<httpHandlers>
  <add path="*.aspx" verb="GET,POST" type="System.Web.UI.PageHandlerFactory" validate="false"/>
</httpHandlers>

Казалось бы, добавив это в мой Web.Config, я должен сказать IIS прекратить проверку существования файлов .aspx и просто передать запрос для обработки. Это не работает, хотя.

Есть предложения?

Ответы [ 2 ]

2 голосов
/ 30 сентября 2010

Проблема с IIS 6 и ASP.NET заключается в том, что они не интегрированы. IIS необходимо сообщить об ASP.NET через сопоставления сценариев (.aspx, .asmx, подстановочный знак и т. Д.).

Ни один из ваших web.config параметров конфигурации не повлияет на IIS, поскольку web.config предназначен для настройки поведения ASP.NET, а не IIS. IIS не знает web.config.

Если вы не можете передать запрос в конвейер ASP.NET (через карту сценариев), ничего не произойдет, и все ваши настройки web.config будут игнорироваться.

С IIS 7 история совсем другая. В IIS7 ASP.NET и IIS тесно интегрированы и используют один и тот же конвейер, что позволяет вам достичь желаемого результата.

Альтернативой может быть выяснить, выполняет ли ваш хостер перезаписывающий URL-адрес, такой как ISAPI_Rewrite, на своих серверах. Таким образом, вы можете переписать URL-адреса без необходимости сопоставления карты сценариев с подстановочными знаками с IIS6.

1 голос
/ 01 октября 2010

Путем некоторых проб и ошибок, наряду с дополнительными поисками в Интернете, я нашел решение. По сути, это похоже на ответ Кева.

IIS не будет обрабатывать запрос как .NET, если он не имеет известного расширения файла (.aspx, .ascx и т. Д.). Когда я отправляю что-то вроде www.mydomain.com/anything, он ищет файл или папку с именем «что-нибудь», а когда он не находит, он просто обращается к обработчику по умолчанию IIS 404.

Вот где я взял верх. Я изменил IIS 6 для пересылки проблем 404 на /404.aspx. Затем я создал эту страницу с общим сообщением «Ваш файл не найден» в том же стиле, что и мой веб-сайт.

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

www.mydomain.com/404.aspx?404;http://www.mydomain.com/anything

Это позволяет мне анализировать запрос в httpModule и переписывать по мере необходимости!

...