404 Перенаправление для страниц без aspx
Я использую код web.config ниже для перенаправления запросов на недостающие страницы на страницу обработки ошибок 404:
<customErrors mode="On" defaultRedirect="404.aspx" redirectMode="ResponseRewrite">
<error statusCode="404" redirect="404.aspx"/>
</customErrors>
Он отлично работает, когда я ищу такие страницы, как "missing.aspx", но он не работает на страницах без расширения ".aspx", таких как "missing.asp" или просто "отсутствует". Когда он не работает, он просто загружает стандартную страницу с ошибкой IIS 7.5.
Что я делаю неправильно? Я использую .net 4. Я заметил, что другие люди задавали один и тот же вопрос, но они не получили ответа.
Спасибо!
Ответы
Ответ 1
Как dbaseman говорится, что это связано с тем, что обработчики asp.net не вызываются для файлов nonasp.net. Легкий способ заставить обработчик asp.net работать со всеми запросами - установить следующее в вашем web.config.
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
</system.webServer>
Это говорит, что IIS запускает все управляемые модули для всех запросов, таких как .html,.jpg,.css,.js и т.д. Это обычно неодобрительно, поскольку он просто вводит дополнительную обработку и задержку.
http://www.hanselman.com/blog/BackToBasicsDynamicImageGenerationASPNETControllersRoutingIHttpHandlersAndRunAllManagedModulesForAllRequests.aspx
Другой вариант попробовать (более чистый, чем выше) был отправлен в качестве ответа здесь: fooobar.com/questions/154464/...
Ответ 2
Причина в том, что расширения, отличные от ASPX, никогда не попадают в обработчик ASP.NET; те ошибки, которые вы видите, поступают из IIS. Существует отдельный раздел httpErrors под system.webServer в web.config, который вам нужно будет настроить для обработки этих ошибок. Подробнее см. здесь.
Пример из ссылки:
<configuration>
<system.webServer>
<httpErrors errorMode="DetailedLocalOnly" defaultResponseMode="File" >
<remove statusCode="500" />
<error statusCode="500"
prefixLanguageFilePath="C:\Contoso\Content\errors"
path="500.htm" />
</httpErrors>
</system.webServer>
</configuration>