Рекомендации по перенаправлению заголовков PHP - PullRequest
4 голосов
/ 21 июня 2010

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

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

Ответы [ 2 ]

6 голосов
/ 21 июня 2010

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

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

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


В принципе, достаточно простого:

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

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

1 голос
/ 21 июня 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...
}
...