Зачем устанавливать 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 обрабатывает его самостоятельно, не передавая запрос.
это интересно, через пару лет я вдруг понял, в чем проблема.
благодаря решению @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 будет работать с пользовательской ошибкой для несуществующего каталога.