Рекомендации по перенаправлению заголовков PHP

Я создаю PHP CMS и имею некоторые системные страницы, такие как страница 404, страница обслуживания и страница несанкционированного доступа. Если страница A не найдена, CMS перенаправляет на страницу 404; если у пользователя нет доступа к странице B, он будет перенаправлен на страницу с несанкционированным доступом и т. д.

Я хотел бы использовать правильный код состояния в заголовке каждой страницы, но мне нужно разъяснить, как обрабатывать заголовок/перенаправление. Нужно ли помещать заголовок 404 на страницу А, а затем перенаправлять на страницу 404, или я помещаю статус 404 на саму страницу 404? Кроме того, если последнее является правильным ответом, какой тип перенаправления я должен использовать, чтобы попасть туда, 301 или 302?


person VirtuosiMedia    schedule 21.06.2010    source источник


Ответы (2)


Если пользователь попадает на страницу А, а эта страница не существует, то не выполняйте перенаправление: просто отправьте код ошибки 404 со страницы А — и, чтобы быть приятным для вашего пользователя, HTML-контент, указывающий, что страница не существует.

Таким образом, браузер (и это еще более верно для поисковых роботов! ) будет знать, что не найденная страница – это страница А, а не что-то еще, на что вы попытались бы перенаправить.

То же самое для других типов ошибок, кстати: если определенный URL-адрес соответствует ошибке, код ошибки должен быть отправлен с этого URL-адреса.


В принципе, чего-то такого простого должно быть достаточно:

if (page not found) {
    header("404 Not Found");
    echo "some nice message that says the page doesn't exist";
    die;
}

(Ну, конечно, можно было бы вывести что-нибудь покрасивее; но вы поняли ;-)) )

person Pascal MARTIN    schedule 21.06.2010
comment
Хорошо, это имеет больше смысла, чем то, что я делал. Спасибо, Паскаль. - person VirtuosiMedia; 21.06.2010
comment
ЗАЧЕМ? Почему ты такой быстрый? :'( - person therufa; 21.06.2010
comment
@VirtuosisiMedia: пожалуйста :-) ;; @Oden: 2 минуты между вопросом и моим ответом, это не так быстро ^^ - person Pascal MARTIN; 21.06.2010
comment
@Pascal MARTIN Хорошо, но быстрее меня :) Ведьма в основном не имеет большого значения, из-за моего плохого английского :D - person therufa; 21.06.2010
comment
@Oden - я дал вам +1 за правильный, но slooowwww ответ;) Спасибо вам обоим. - person VirtuosiMedia; 21.06.2010
comment
И на заметку о сайте: ваше «приятное сообщение» может быть полноценной HTML-страницей, включая предложения и форму поиска для сайта. У конечного пользователя не должно быть абсолютно никакой необходимости нажимать кнопку «Назад» или возиться с самим URL-адресом, особенно если это внешняя ссылка, которая привела посетителя туда. - person Wrikken; 21.06.2010
comment
Хорошая мысль, Вриккен, именно так я и собираюсь это сделать. Эти системные страницы будут интегрированы с шаблонами сайта и будут полностью доступны для редактирования администратором. - person VirtuosiMedia; 22.06.2010

Я не уверен, что перенаправление - лучший способ сделать это. Я бы предпочел использовать некоторые встроенные функции, которые включены в проект.

Если данные не найдены, не перенаправляйте пользователя на другую страницу, просто отправьте ему сообщение об ошибке, типа Hey, this site does not exists! Try an other one и так далее. И не в конце, вы должны встроить в код часть кода из ответа Паскаля Мартина.

Я бы сделал это в функцию и вызвал бы ее из бутстрапа или чего-то подобного.

function show_error($type="404", $header = true, $die = false)
{
    if($header)
        header("404 Not Found");

    echo file_get_contents($type.'.php');

    if($die) die; //
    // and so on...
}
person therufa    schedule 21.06.2010