Почему настройка 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 - не найдена ресурс, который вы ищете, был удалено, изменилось ли его имя или временно недоступен.
Отмеченная информация об ошибке:
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 не поддерживает этот тип адреса или нет? Как я могу запретить пользователям видеть эту желтую страницу.
Изменить:
Спасибо Дэвиду, но я нашел фактическую причину и правильное решение. Пожалуйста, см. Мой ответ.
Ответы
Ответ 1
@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>
Ответ 2
Это связано с тем, что модуль ASP.Net настроен для обработки определенных расширений файлов. IIS определяет, что .aspx должен обрабатываться модулем ASP.Net, а затем выполняется секция customerrors в файле web.config(и, действительно, сам web.config).
Поскольку вы запросили страницу, даже не настроенную для ASP.Net, IIS обрабатывает ее самостоятельно, не передавая запрос.
Ответ 3
Я сделал поиск
попробуйте эту ссылку
Ошибка Strange 404 в IIS 7.5
Ответ 4
Для любых других файлов, отличных от .aspx, вы можете настроить это в IIS:
http://www.xefteri.com/articles/show.cfm?id=11
Ответ 5
Во-первых, URL-адрес каталога должен иметь конечную косую черту, в противном случае это просто файл без расширения.
www.mysite.com/NotExistDirectory/
Во-вторых, ASP.NET IIS-модуль является обработчиком только для типов ASP MIME, поэтому каталог остается для веб-сервера.
В-третьих, customerror является частью system.web является частью конфигурации ASP.net
и httperror является частью system.webserver является частью конфигурации IIS.
Предполагая, что настройки модуля http по умолчанию в конфигурации IIS httperror будет работать с пользовательской ошибкой для несуществующего каталога.
Ответ 6
Это интересно, через пару лет я внезапно понял, в чем проблема.
Благодаря решению @David, но причина и полное решение - вот что:
Установив режим customErrors
на "On
", он работает только тогда, когда мы получаем исключение в приложении ASP.NET. Когда мы пытаемся достичь nonExistingdirectory
or notExsitingStaticResouce
, IIS выдает ошибку 404, и это делает не достигают времени выполнения asp.net и serverd с помощью 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.