Почему установка customErrors в web.config в этом случае не работает? - PullRequest
10 голосов
/ 20 декабря 2010

На моем веб-сайте 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 Error:

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

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

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 не поддерживает этот тип адреса или нет? Как я могу запретить пользователям видеть эту желтую страницу?

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

Ответы [ 6 ]

11 голосов
/ 01 февраля 2012

@ Мостафа: я столкнулся с точно такой же проблемой.Я обнаружил, что это можно решить, добавив в файл 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>
1 голос
/ 29 июня 2017

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

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

Если установить для customErrors mode значение "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.

1 голос
/ 20 декабря 2010

я сделал поиск

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

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

1 голос
/ 20 декабря 2010

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

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

0 голосов
/ 10 января 2013

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

0 голосов
/ 20 декабря 2010

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

...