代码之家  ›  专栏  ›  技术社区  ›  VirtuosiMedia

PHP重定向头最佳实践

  •  4
  • VirtuosiMedia  · 技术社区  · 14 年前

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

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

    2 回复  |  直到 14 年前
        1
  •  6
  •   Pascal MARTIN    14 年前

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

    (当然,你可以输出更好的东西,但是你知道这个想法;-)

        2
  •  1
  •   therufa    14 年前

    我不确定重定向是否是最好的方法。我宁愿使用一些包含在项目中的内置功能。

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