Страница ошибки ASP.NET Custom для 404 возвращает 302 для статуса http - PullRequest
9 голосов
/ 29 ноября 2010

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

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

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

Ответы [ 5 ]

17 голосов
/ 09 декабря 2010

После поиска в 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;
2 голосов
/ 09 октября 2013

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

0 голосов
/ 10 февраля 2015

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

Страница 404.aspx

protected void Page_Load(object sender, EventArgs e)
{
    Response.StatusCode = 404;
}
0 голосов
/ 20 декабря 2010

Решение было еще проще .. Пожалуйста, посмотрите мой ответ здесь: http://blog.hebbink.com/post/2010/12/14/NET-custom-404-error-page-returns-302-for-http-status.aspx

0 голосов
/ 29 ноября 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...