【问题标题】:PHP Redirect Headers Best PracticesPHP 重定向标头最佳实践
【发布时间】:2010-06-21 19:30:00
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    如果用户到达页面 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;
    }
    

    (当然,你可以输出更好的东西;但你明白了 ;-))

    【讨论】:

    • 好吧,这比我做的更有意义。谢谢,帕斯卡。
    • 为什么?你怎么这么快? :'(
    • @VirtuosisiMedia : 不客气 :-) ;; @Oden:问题和我的答案之间有 2 分钟,这不是 那个 快^^
    • @Pascal MARTIN 好的,但比我快 :) 女巫基本上没什么大不了的,因为我的英语很差 :D
    • 在站点注释上:您的“好消息”可以是完整的 HTML 页面,包括站点的建议和搜索表单。最终用户绝对不需要按下后退按钮或摆弄 url 本身,特别是如果它是一个将访问者带到那里的外部链接。
    【解决方案2】:

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

    如果没有找到数据,不要将用户重定向到另一个页面,只需向他发送错误消息,如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...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-22
      • 2014-02-15
      • 1970-01-01
      • 2010-12-27
      • 1970-01-01
      • 1970-01-01
      • 2015-05-15
      • 2016-07-17
      相关资源
      最近更新 更多