Вопрос

В настоящее время в моих сценариях PHP я перенаправляю пользователя на пользовательскую страницу ошибки 404, когда он / она пытается получить доступ к контенту, который не существует или не принадлежит этому пользователю. Вот так:

header('Location: http://www.mydomain.com/error/notfound/');
exit;

Я понимаю, что вышеуказанный вызов header () по умолчанию отправляет код состояния перенаправления 302.

Однако я не понимаю, когда мне следует отправлять код 404 не найден. Прежде чем я перенаправить пользователя? Или когда я отображаю страницу / error / notfound / ?

Спасибо за вашу помощь!

Это было полезно?

Решение

Вы должны сделать что-то вроде этого:

header("HTTP/1.0 404 Not Found");
include 'error.php';
die();

Другие советы

Вы вообще не выполняете 404 ошибки в качестве перенаправления.

Что вы действительно хотите сделать, это отправить заголовок состояния 404, а затем заменить текущий вывод телом страницы 404.

Есть несколько способов сделать это, и это в значительной степени зависит от структуры вашего сайта. Приложения MVC обычно передают это вперед. Я видел другие системы, которые выдают исключение, а затем зарегистрированный обработчик исключений заботится об отображении страницы 404.

Во всяком случае, грубые шаги

<Ол>
  • Определить содержание недействительным
  • Выход из текущего исполнения
  • Очистите все выходные данные, если они есть.
  • Отправьте заголовок статуса 404
  • Отправьте содержимое страницы 404
  • Вы не можете использовать 404 и Location: вместе. Местоположение действительно только для некоторых ответов (201 и 3xx)

    Однако вы можете отправить пользовательскую HTML-страницу как текст вашего ответа 404.

    С php.net:

      

    Есть два вызова заголовка специального случая. Первый - это заголовок, который начинается со строки «HTTP /». (регистр не имеет значения), который будет использоваться для определения кода состояния HTTP для отправки. Например, если вы настроили Apache для использования PHP-скрипта для обработки запросов на отсутствующие файлы (с помощью директивы ErrorDocument), вы можете убедиться, что ваш скрипт генерирует правильный код состояния.

    <?php
    header("HTTP/1.0 404 Not Found");
    ?>
    

    http://us.php.net/manual/en/function .header.php

    Вы должны отправить код состояния 404 HTTP. Это понимают браузеры и сканеры . Вы также можете добавить более удобную страницу с сообщениями об ошибках, объясняющую, что произошло, включая форму для поиска по вашему сайту, ссылки на Soundex и т. Д.

    A " перенаправление " и "не найден"; разные понятия.

    Какой файл можно найти?
    http://www.mydomain.com/error/notfound/
    или
    http://www.mydomain.com/not_exist.html

    " http://www.mydomain.com/not_exist.html " ; страница должна иметь заголовок 404 И «Страница не найдена» содержание.

    Быстрое исправление может быть следующим:

    header("HTTP/1.0 404 Not Found");
    readfile('http://www.mydomain.com/error/notfound/');
    exit;
    

    Но для этого требуется 2 запроса apache, и это довольно неприятно.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top