2011-12-12 60 views
0

在PHP中有没有办法捕获404找不到?

如果用户在404上结束,我希望他们被重定向到一个已知页面,但是如果是由于404错误导致显示不同的内容。

喜欢的东西

if($_SERVER['HTTP_REFERER'] == 404){ 
    echo("You've been redirected!"); 
} 

在此先感谢

+0

请不要重定向错误,除非它是永久性的,例如移动到其他网址的页面。对于真正的错误重定向是非常烦人的,因为你例如不能轻易地修正网址中的错字或点击F5。 – ThiefMaster

+0

我在想,如果页面没有找到,设置一个标志,说它导致了404,然后重定向到一个搜索页面,说'我找不到+查询',但尝试搜索等。这是一个坏主意? – Cristian

+0

@ThiefMaster,'mod_rewrite'或其他加载另一个页面而不更改地址栏的方法,例如'require'。 – FakeRainBrigand

回答

3

PHP只给出路径,向您推荐当前页的页面时,它无法检索该页面的状态代码。

您不应该需要重定向页面指定的页面不存在时。在Apache中,您可以指定ErrorDocument为PHP文件,只需在文件中追加一个查询字符串,例如ErrorDocument /index.php?error=404,以便您的PHP文件知道所请求的页面不存在。这样,您可以在同一页面上直接向用户显示错误,并且URL不会丢失。您不需要会话或服务器变量,只需要$_GET['error']即可检查是否存在提供给页面的错误代码。

或者,您可以指定一个预构建的文档,该文档只是一个404错误页面,例如ErrorDocument my404error.html,它将在没有找到任何页面的服务器端处理的情况下显示。

+0

完美!它真的没有跨越我的想法使用PHP GET。非常感谢! – Cristian

+0

然后你可以在404错误文档中使用'header(“Location:$ loc”);'来重定向到你喜欢的页面。 – 2011-12-12 23:39:26

+0

刚刚尝试过你所说的,htaccess并没有通过URL,例如www.example.com/notexists,用htaccess重定向加载正确的页面,但url仍然是www.example.com/notexists – Cristian