Назад | Перейти на главную страницу

Почему IIS не выполняет мою пользовательскую страницу 404? Вместо этого он пытается обслуживать необработанный исходный код

Я пытаюсь настроить пользовательские ошибки в IIS6.

Я выбираю ошибку 404, устанавливаю раскрывающийся список на «URL», затем ввожу это как URL «/404.aspx».

Когда перейти к:

http://mysite.com/no-page-here

Он находит 404.aspx, но не обрабатывает его как страницу .Net - он пытается обработать источник в виде XML-файла, а затем терпит неудачу, потому что не выполняет синтаксический анализ.

Ошибки 404 отлично работают на страницах .Net, потому что я установил это в элементе CustomErrors файла web.config. Но для ресурсов, отличных от .NET, я должен использовать ошибки IIS, и он отказывается просто перенаправлять на страницу 404. По сути, он пытается дополнить его исходным кодом.

У вас включены правильные расширения в IIS6? В диспетчере IIS перейдите к Web Extensions (обычно последний элемент в левом дереве навигации) и убедитесь, что все подходящие включены (обычно .NET). В противном случае именно это и произойдет.

Похоже, у вас есть ошибка в самом файле ошибок. Если вы перейдете к файлу, он обслуживается должным образом или у вас наблюдаются те же симптомы?

Вы пробовали ввести полный URL вместо просто "/"? Я думал, что такое поведение происходит, когда вы выбираете «файл», а не URL-адрес, но, возможно, если это локальный URL-адрес, он также обходит рабочий процесс ASP.Net.

Я не думаю, что вы можете использовать динамическую страницу в качестве 404. Если я правильно помню, это должна быть статическая страница. Я думаю, вы могли бы перенаправить оттуда с помощью мета или JS на динамическую страницу, хотя это не «стандарт»

это Статья Technet говорит, что нужно обязательно выбрать URL, иначе рискуете вернуть исходный код страницы.

Эта статья объясняет, как вы можете использовать файл global.asax для перехвата всех ошибок приложения, включая 404.

Global.asax должен иметь:

protected void Application_Error(object sender, EventArgs e)
{
}

Когда сейчас генерируется какое-либо исключение - будь то общее исключение или 404 - оно завершается ошибкой Application_Error.

Вам нужно установить раскрывающееся меню на URL-адрес, а затем ввести «/sitename/404.aspx», где sitename - это корневой каталог веб-сайта.

На самом деле он действует так, как будто вы установили «Файл» вместо «URL», но вы этого не сделали. Что произойдет, если вы вставите в браузер весь URL-адрес 404? Если это сработает, в качестве обходного пути вы можете попробовать вставить полный URL вместо /404.aspx:

http://www.example.com/404.aspx

Вы упомянули, что это клиентский сервер. Убедитесь, что нет двух веб-сайтов, указывающих на один и тот же физический каталог, и вы редактируете не тот. Есть еще А также убедитесь, что сайт отмечен как приложение.

Судя по звукам, вы пытаетесь использовать web.config, чтобы указать на страницу ошибки .NET. Это будет работать только для страниц .Net. Если вы используете сочетание, скажем, Classic ASP и .Net, вы должны установить ошибки IIS, чтобы они указывали на нужный файл. Для этого у вас должен быть доступ к серверу напрямую. Или напишите что-нибудь в вашем Global.asa для перенаправления при ошибках.

По крайней мере, так мне всегда приходилось делать.

Изменить: теперь, когда я думаю об этом немного больше и немного покопался на моем локальном хосте, не похоже, что вы можете указать настраиваемые ошибки на страницу .Net. Похоже, что ASP.NET не используется для обработки тех страниц, которые, конечно, необходимы для ее визуализации. Вам нужно будет использовать HTML-страницу и, возможно, перенаправить оттуда.