Пользовательская ошибка IIS 404 не работает должным образом
Я работаю над IIS6, ASP.NET, VS2008. Веб-сайт использует собственный обработчик ошибок, чтобы уловить 404 ошибки и выполнить альтернативную страницу. Когда представлен URL-адрес формы:
http://srv/crimson/articles/index
Все работает отлично. Но URL-адрес формы:
http://srv/crimson/blog.aspx
Где не существует blog.aspx, не удается выполнить следующее сообщение:
Ошибка сервера в приложении "/Crimson". Описание: HTTP 404...
Когда я пытаюсь и отлаживаю, ни одна из контрольных точек в моем обработчике 404 не попадает. Таким образом, похоже, что что-то ловит запрос раньше. Где? И как мне передать запрос на мой обработчик?
Edit
Спасибо тем, кто ответил, но ни одна из этих идей не работала. Я решил атаковать проблему по-другому.
Ответы
Ответ 1
Вы можете попробовать:
В IIS6:
- открыть "свойства" для вашего сайта.
- перейдите на вкладку "домашний каталог".
- нажмите "Конфигурация"
- найдите расширение ".aspx"
- нажмите "изменить"
- установите флажок, подтверждающий, что файл существует.
изменить
А как насчет этого:
http://msdn.microsoft.com/en-us/library/h0hfz6fc(VS.80).aspx
<customErrors defaultRedirect="sorry.htm" mode="On">
<error statusCode="404" redirect="NotFound.aspx"/>
</customErrors>
Поскольку "RemoteOnly" указывает, что пользовательские ошибки отображаются только для удаленных клиентов, а ошибки ASP.NET отображаются локальному хосту.
Ответ 2
hmm, Ассаф прав, но чтобы добавить к его ответу, мне нужно опубликовать код.
Да, Assaf означает нечто иное. ASP.NET предлагает собственную обработку ошибок, настроенную через web.config. Вы можете управлять этим с помощью привязки администратора IIS или непосредственно в файле web.config.
Внутри < system.web > элемент, который вы должны иметь:
<customErrors defaultRedirect="sorry.htm" mode="RemoteOnly">
<error statusCode="404" redirect="NotFound.aspx"/>
</customErrors>
Вы можете настроить другую страницу для каждого кода ошибки HTTP или позволить переадресации по умолчанию обрабатывать их все.
Вы обнаружите, что вам действительно нужно установить эти страницы ошибок в как пользовательские ошибки IIS и конфигурацию ASP.NET, так как в противном случае вы попадете в эту ситуацию - некоторые страницы идут на ваш 404, а другие используют по умолчанию, которые вы не настроили.
Вы также должны убедиться, что ваша пользовательская страница 404 фактически возвращает заголовок 404, чтобы гарантировать, что поисковые системы и т.д. правильно ее обрабатывают.
Response.StatusCode = 404;
Response.StatusDescription = "Not found";
Ответ 3
ASP.Net имеет собственную конфигурацию собственных ошибок.
Перейдите в конфигурацию ASP.Net своего виртуального каталога (веб-приложение) и щелкните правой кнопкой мыши → ASP.Net → Изменить конфигурацию → Пользовательские ошибки.
Ответ 4
Возможно, у вас есть 500, поэтому перенаправление для 404 не запускается. Вы можете сначала сосредоточиться на этой ошибке 500.