404 запрос перенаправления заголовка - PullRequest
5 голосов
/ 16 октября 2011

В стандартном приложении LAMP я отправляю людей на мою страницу 404, используя правило .htaccess, например так:

ErrorDocument 404 http://www.mydomain.com/404.php

Мы обслуживаем динамические изображения, используя php-файл, который читает файлы из файловой системы, ямы только что заметили, что когда изображение удаляется из приложения, мы не собираем его, поэтому запрос http://www.mydomain.com/image_4.jg (например), который вызывает image.php с использованием mod_rewrite, не перенаправляет пользователя на404 страница как файл динамического изображения всегда будет существовать.В этом случае я знаю, что я должен использовать 404, но я не уверен, где.

Очевидно, я знаю, что мне нужно вручную вставить перенаправление заголовка на страницу 404.php, когда изображение было удалено, но должноя действительно отправляю 404 заголовок с этим перенаправлением ?.Глядя на код, наша страница 404.php на самом деле отправляет заголовок 404 уже с ("HTTP/1.1 404 Not Found");, что наша команда SEO поручила несколько лет назад, не уверен, правильно ли это или нет ?.Мне кажется нелогичным, поскольку это почти означает, что сама страница 404 не была найдена.

Я думаю, что тогда это 2 вопроса:

  • Должен ли я отправить 404заголовок внутри перенаправления, когда изображение не найдено?
  • Должна ли моя страница 404 действительно отправлять заголовок 404?

РЕДАКТИРОВАТЬ

На самом деле не представляется возможным отправить 404 и перенаправить одновременно, например, это приводит к тому, что Chrome отображает "Ой"! Похоже, эта ссылка не работает. "сообщение

header( "Location: /404.php", true, 404 );

Если вы разбиваете заголовки, как это, то это также не работает должным образом

header("HTTP/1.1 404 Not Found");
header("Location: /404.php" );

В этом случае, если вы посмотрите на заголовки, оно отправляет 302 с последующимна 404. Достаточно ли в этом случае, может быть, просто отправить заголовок без перенаправления?может быть, просто отправить 410, как некоторые рекомендуют?

Ответы [ 6 ]

3 голосов
/ 16 октября 2011

404 Не найдено

Сервер не нашел ничего, соответствующего Request-URI. нет указывается, является ли условие временным или постоянны. Код состояния 410 (Gone) ДОЛЖЕН использоваться, если сервер через некоторый внутренне настраиваемый механизм знает, что старый ресурс постоянно недоступен и не имеет адреса пересылки. Этот код состояния обычно используется, когда сервер не хочет точно указать, почему запрос был отклонен, или когда никто другой ответ применим.

& mdash; Определения кодов состояния

Ответ 404 должен быть отправлен обратно клиенту, когда ресурс не найден.

Должен ли я отправлять заголовок 404 в перенаправлении, когда изображение не нашли?

Да. Это сообщает клиенту, запрашивающему динамическое изображение, что ресурс не найден. Если вы знаете, что ресурс никогда не вернется, используйте вместо него 410 (Унесенные).

Должна ли моя страница 404 отправлять заголовок 404?

Да. См. 404 Страницы ошибок и перенаправления для SEO

Обновление

header("HTTP/1.0 404 Not Found"); должно быть достаточно; однако Google Chrome не может отобразить пользовательскую страницу 404, если длина содержимого составляет менее 512 байт.

2 голосов
/ 16 октября 2011

Документы об ошибках, определенные с помощью директивы ErrorDocument, обслуживаются только тогда, когда веб-сервер распознает, что запрос не может быть сопоставлен с существующим файлом. Но поскольку вы используете mod_rewrite для сопоставления их с существующим image.php , они, очевидно, найдены. Таким образом, с точки зрения веб-сервера, первоначальный запрос может быть выполнен.

На данный момент, не имеет значения, если конкретный запрос не может быть выполнен и приводит к 404 позже. В этом случае image.php должен дать правильный ответ об ошибке.

Должен ли я отправлять заголовок 404 в перенаправлении, когда изображение не найдено?

Вы можете отправить только один код состояния ответа. Таким образом, вы можете отправить ответ об ошибке (4xx) или ответ о перенаправлении (3xx). В вашем случае наличие абсолютного URL в качестве URL документа даст код состояния перенаправления (т. Е. 302) вместо источника 404.

Должна ли моя страница 404 отправлять заголовок 404?

Да, конечно. Вот для чего предназначены коды состояния.

А также предоставьте некоторую полезную информацию об этих документах об ошибках. Нет ничего хуже бессмысленных ошибок в документах.

2 голосов
/ 16 октября 2011

Просто сказал: да, на оба вопроса.

Заголовок 404, отправленный из image.php, не будет перенаправлять вас на ошибочный документ 404, указанный в .htaccess, поэтому вам придется вручную перенаправлять на 404.php всякий раз, когда изображение не найдено. Предпочтительный способ - 410 (Унесенные), тем более что вы знаете, что запрошенный ресурс удален и больше не вернется, поэтому поисковые системы могут удалить ссылку.

Что касается второго, то да: так и должно быть, хотя Apache уже сделает это за вас.

1 голос
/ 08 августа 2014
header("HTTP/1.1 404 Not Found");
header("Refresh: 0; url=/404.php");
1 голос
/ 30 июля 2013
header("HTTP/1.0 404 Not Found");

Вы можете включить страницу 404, отправка только заголовка даст вам пустую страницу

header("HTTP/1.0 404 Not Found");
include_once("404.html");
exit();
1 голос
/ 16 октября 2011
  1. Я не знаю, буду ли я перенаправлять, я бы лучше включил ваш 404.php
  2. Это правильно.Страницы ошибок по умолчанию также существуют и отправляют 404.
...