2010-11-29 2 views
8

На моем веб-сайте asp.net у меня есть собственные страницы ошибок, определенные в моем файле web.config.ASP.NET Пользовательская страница ошибки для 404 возвращает 302 для статуса http

<customErrors mode="On" defaultRedirect="~/defaulterror.htm" > 
<error statusCode="404" redirect="~/404.htm" /> 

Когда файл не найден его правильно отобразить страницу 404.htm но вопрос, когда я Скрипач прослеживать возвращает 302 как статус HTTP code.This является большой проблемой для страницы поиска двигателя индексирования из-за этот лот сломанных ссылок по-прежнему индексируются недавно из-за этого на моем веб-сайте. как я могу предотвратить возвращение 302 в качестве кода состояния HTTP для файлов, не найденных ошибок и возврата 404 для файлов, не найденных ошибок. Я использую asp.net 3.5.

+1

См [это сообщение] (http://stackoverflow.com/questions/619895/how-can-i-properly-handle-404 -in-asp-net-mvc/7967759 # 7967759), который является примером пользовательского 404-страничного решения с использованием атрибутов фильтра ASP.Net MVC. Это решение также позволяет избежать сообщений 302/200 в браузере. Браузер получает ответ 404. – 2011-11-01 14:16:50

ответ

15

После того, как в этой статье возникла проблема с Google, это поведение по умолчанию, которое Microsoft ASP.NET обеспечивает для этой ситуации. Это очень плохо для SEO. Произведение вокруг, я нашел, чтобы проверить, существует ли запрошенный файл в обработчике HTTP (или global.asax файла), или использование:

<customErrors mode="On" redirectMode="ResponseRewrite"> 
    <error statusCode="404" redirect="/FileNotFound.aspx" /> 
</customErrors> 

Если запрашиваемый файл не существует, то перепишет путь запроса к файл не найден (если используется обработчик HTTP или global.asax), очистите серверные ошибки в коде страницы ошибки 404 и добавьте заголовок ошибки 404 в ответ вручную, а не ожидайте, когда сервер сделает это.

Server.ClearError(); 
Response.Status = "404 Not Found"; 
Response.StatusCode = 404; 
+0

Атрибут redirectMode был добавлен в .NET FW 4.0, по крайней мере! – 2011-03-29 19:16:20

+0

Это прекрасно. URL-адрес остается на той же странице, но теперь я получаю код статуса 404. – kd7iwp 2012-05-17 20:57:14

0

Как вы, вероятно, уже знаете, что ответ 302 используется, чтобы сообщить вызывающему, что запрошенный ресурс был перемещен в другое место.

Когда вы видите, в Fiddler, возвращаемый HTTP-код 302, есть также объявление 'location' в заголовке? Например:

HTTP/1.1 302 Found 
Location: http://www.yoursite.com/somewhere/blah.htm 

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

2

В ASP.NET 4.0 можно использовать для отправки redirectMode="ResponseRewrite" хороших страниц ошибок и правильный код HTTP.

0

Если вы добавили следующее к своему 404-страничному коду. Вы получите правильные результаты -

Page 404.aspx

protected void Page_Load(object sender, EventArgs e) 
{ 
    Response.StatusCode = 404; 
} 
Смежные вопросы