PHP重定向标头最佳实践

时间:2010-06-21 19:30:00

标签: php http-headers http-status-code-404

我正在创建一个PHP CMS并拥有一些系统页面,如404页面,维护页面和未经授权的访问页面。如果找不到页面A,CMS将重定向到404页面;如果用户无权访问页面B,它将重定向到未授权的访问页面等。

我想在每个页面的标题中使用正确的状态代码,但我需要澄清如何处理标题/重定向。我是否将404标题放在页面A上,然后重定向到404页面,还是将404状态放在404页面上?此外,如果后者是正确的答案,我应该使用什么样的重定向到达那里,301或302?

2 个答案:

答案 0 :(得分:6)

如果用户到达页面A并且该页面不存在,则不要重定向:只需从页面A发送404错误代码 - 并且为了对您的用户有益,指示该页面的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 :(得分:1)

我不确定重定向是否是执行此操作的最佳方式。我宁愿使用项目中包含的一些内置功能。<​​/ p>

如果找不到数据,请不要将用户重定向到另一个页面,只需向他发送错误消息,如Hey, this site does not exists! Try an other one等。 而不是最后,你应该构建代码,代码部分来自Pascal Martin的答案。

我会将其转换为函数,并从引导程序或具有类似行为的内容中调用它。

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...
}