Подтвердить что ты не робот

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. Я заметил, что другие люди задавали один и тот же вопрос, но они не получили ответа.

Спасибо!

4b9b3361

Ответ 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>