Зачем устанавливать customErrors в интернете.конфиг не работает в этом случае?

в моем ASP.NET 3.5 веб-сайт, который публикуется в общем хостинг-провайдере, я настроил свой веб-сайт.файл конфигурации выглядит так:

    <customErrors mode="On" defaultRedirect="GenericErrorPage.htm">
        <error statusCode="403" redirect="AccessDenied.htm"/>
        <error statusCode="404" redirect="FileNotFound.htm"/>
    </customErrors>

Если страницы запроса пользователя, которые не существуют ( например, "www.example.com/NotExistPage.aspx"), пользователь будет перенаправлен на FileNotFound.htm страница, как мы ожидаем .

но если пользователь запрашивает какой-то адрес, например : "www.example.com/NotExistDirectory-без .расширение aspx, пользователь столкнется со страницей ошибок IIS 7.5 :

ошибка HTTP 404.0 - не найден ресурс, который вы ищете, был удалили, изменили его название или временно недоступен.

информация об ошибке Detialed:

Module  IIS Web Core
Notification    MapRequestHandler
Handler StaticFile
Error Code  0x80070002

Requested URL   http://www.example.com:80/NotExistDirectory
Physical Path   D:Websitesexampleexample.comwwwrootNotExistDirectory
Logon Method    Anonymous
Logon User  Anonymous

это желтая страница, которая не является удобной для пользователя, и мы не ожидали .

мне интересно, что настройка customeError в webconfig не поддерживает этот тип адреса или нет ? Как я могу запретить пользователям видеть эту желтую страницу .

Edit: Благодаря ответу Дэвида, но я нашел настоящую причину и правильное решение. Пожалуйста, см. Мой ответ.

6 ответов


@Mostafa: я столкнулся с той же проблемой. Я узнал, что это можно решить, добавив следующее В интернет.конфигурационный файл:

<system.webServer>
    <httpErrors errorMode="Custom">
      <remove statusCode="404" subStatusCode="-1" />
      <error statusCode="404" subStatusCode="-1" prefixLanguageFilePath="" path="/MyErrorPage.aspx" responseMode="ExecuteURL" />
    </httpErrors>
  </system.webServer>

Это потому, что ASP.Net модуль настроен для обработки определенных расширений файлов. IIS определяет, что .aspx должен обрабатываться ASP.Net модуль, а затем раздел customerrors в интернете.config (и действительно web.config itself).

поскольку вы запросили страницу, даже не настроенную для ASP.Net, IIS обрабатывает его самостоятельно, не передавая запрос.


Я сделал некоторые поиска

попробуйте эту ссылку

странная ошибка 404 в IIS 7.5


это интересно, через пару лет я вдруг понял, в чем проблема.

благодаря решению @David, но причина и полное решение таковы:

установка customErrors режим на "On " это работает только тогда, когда мы получаем исключение в ASP.NET применение, в то время как когда мы пытаемся достичь nonExistingdirectory или notExsitingStaticResouce, IIS отображает ошибку 404, и она не достигает asp.net среда выполнения и serverd IIS напрямую.

поэтому нам нужно добавить configuraiton для IIS как ниже в Интернете.config:

  <system.webServer>
    <httpErrors errorMode="Custom">
      <remove statusCode="404"/>
      <error statusCode="404" path="~/404.html" responseMode="File" />
    </httpErrors>
  <system.webServer>

важно установить responseMode на "File", в противном случае код состояния автоматически изменится с 404 на 200 . Таким образом, с точки зрения клиента они не получают фактический код состояния 404.


для любых других файлов, кроме .aspx, вы можете настроить это в IIS: http://www.xefteri.com/articles/show.cfm?id=11


во-первых, url-адрес каталога должен иметь конечную косую черту, иначе это просто файл без расширения. www.mysite.com/NotExistDirectory/
Во-вторых, ASP.net модуль IIS является обработчиком только для типов ASP MIME, поэтому каталог остается для веб-сервера. В-третьих, customerror является частью системы.web является частью ASP.net конфигурация
и httperror является частью системы.веб-сервер является частью конфигурации IIS.
Предполагая, что HTTP-модуль по умолчанию в конфигурации IIS httperror будет работать с пользовательской ошибкой для несуществующего каталога.