2010-06-21 89 views
4

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

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

回答

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

(嗯,你可以输出的东西,当然更好;但你的想法;-))

+0

好的,这比我正在做的更有意义。谢谢,帕斯卡。 – VirtuosiMedia 2010-06-21 19:35:04

+0

为什么?你为什么这么快? :'( – 2010-06-21 19:37:35

+0

@VirtuosisiMedia:不客气:-) ;; @Oden:2的问题,我的答案分钟之间,这不是** **那快^^ – 2010-06-21 19:40:06

1

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

如果找不到数据,不要将用户重定向到另一个网页,只给他一个错误信息,如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... 
}