PHP重定向头的最佳实践

4
我正在创建一个PHP内容管理系统,其中包括404页面、维护页面和未授权访问页面等系统页面。当找不到A页面时,CMS将重定向到404页面;如果用户无权访问B页面,则会重定向到未经授权的访问页面等等。
我想在每个页面的头部使用适当的状态码,但我需要澄清如何处理头部/重定向。我应该在A页面上放置404头部,然后重定向到404页面,还是应该在404页面本身上放置404状态?此外,如果后者是正确答案,我应该使用哪种重定向方式,301还是302?
2个回答

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;
}
< p > < em >(当然,你可以输出更好的东西;但是你已经有想法了;-))

(好的,当然你可以输出更漂亮的东西;不过你已经明白我的意思了)

好的,这比我之前做的更有意义。谢谢你,Pascal。 - VirtuosiMedia
为什么?为什么你这么快?:'( - therufa
@VirtuosisiMedia:不客气 :-) ;; @Oden:问题和我的回答之间只有2分钟,也不算快^^ - Pascal MARTIN
@Pascal MARTIN 好的,但是你比我快:) 这其实不算大问题,因为我的英语很差 :D - therufa
1
另外提一下:您的“友好信息”可以是一个完整的HTML页面,包括该网站的建议和搜索表单。绝对不应该需要最终用户按返回按钮或自己调整URL,特别是如果是外部链接带来的访问者。 - Wrikken
显示剩余2条评论

1

我不确定重定向是否是做这件事的最佳方式。我宁愿使用一些内置功能,这些功能已经包含在项目中。

如果未找到数据,请不要将用户重定向到另一个页面,只需发送错误消息,例如嘿,该网站不存在!尝试其他网站等。 并且,在最后,您应该将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...
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接