Почему настройка customErrors в web.config в этом случае не работает?

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

    <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 - Not Found Ресурс, который вы ищете, был удален, его имя было изменено или он временно недоступен.

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

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

Requested URL   http://www.example.com:80/NotExistDirectory
Physical Path   D:\Websites\example\example.com\wwwroot\NotExistDirectory
Logon Method    Anonymous
Logon User  Anonymous

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

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

Редактировать: Спасибо за ответ Дэвида, но я нашел настоящую причину и правильное решение. Пожалуйста, смотрите мой ответ.


person Mostafa    schedule 20.12.2010    source источник


Ответы (5)


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

<system.webServer>
    <httpErrors errorMode="Custom">
      <remove statusCode="404" subStatusCode="-1" />
      <error statusCode="404" subStatusCode="-1" prefixLanguageFilePath="" path="/MyErrorPage.aspx" responseMode="ExecuteURL" />
    </httpErrors>
  </system.webServer>
person David    schedule 01.02.2012
comment
Спасибо, это сработало для меня, я пропустил errorMode=Custom - person Raver0124; 17.04.2014
comment
Для новых читателей, наконец, я нашел настоящую причину и полное решение. Вы можете взглянуть на мой ответ. - person Mostafa; 29.06.2017
comment
не работает, я получаю Эта страница xxx.com не может быть найдена Веб-страница не найдена для веб-адреса: https://xxx.com/aaaaa ОШИБКА HTTP 404 - person Toolkit; 29.12.2017

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

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

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

Итак, нам нужно добавить конфигурацию для IIS, как показано ниже в Web.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.

person Mostafa    schedule 29.06.2017

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

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

person Abhinav Gujjar    schedule 20.12.2010
comment
braintrove.com/article/46/page/2 — попробуйте эту статью, которая объяснит, как настроить пользовательские страницы для IIS. Вы также можете обновить информацию о конвейере IIS. - person Abhinav Gujjar; 20.12.2010

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

person Madhur Ahuja    schedule 20.12.2010
comment
Ссылка мертва. Кроме того, пожалуйста, уточните свои ответы, а не просто публикуйте ссылку. - person DdW; 24.07.2020

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

person Chawathe Vipul S    schedule 10.01.2013