2010-09-29 4 views
0

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

Когда я развертываю на фактический веб-сайт, я получаю страницу 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

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

Ни один из ваших настроек конфигурации 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

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

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