使用apache和php重定向404的问题

时间:2011-07-04 11:46:36

标签: php apache

我有一个网站,如果网址不正确,很长一段时间会将用户直接重定向到hompage。 该脚本使用header('location: /'); die();

,而不是返回404错误

我已将该行更改为header("HTTP/1.0 404 Not Found");die();,服务器开始发送404错误消息。

但是,现在我得到浏览器404错误,而不是我的自定义404页面。 所以,我打开了.htaccess文件并添加了

ErrorDocument 404 /index.php

但没有成功,我仍然获得浏览器404页面而不是我的404页面 (我也尝试在/ etc / apache2 / sites-available / site-conf下设置它)

也尝试过:

    $_SERVER['REDIRECT_STATUS'] = 404;
    header("HTTP/1.1 404 Not Found");
header('location: /');
    die();

仍然 - 没有成功

任何想法?

3 个答案:

答案 0 :(得分:1)

header("HTTP/1.1 404 Not Found");
include('index.php'); // maybe you have to adjust the path;
exit;

使用标题(位置)时,您将状态设置为3xx。如果状态为404,则浏览器不需要遵循任何位置标头。它应仅在3xx响应中遵循位置标题。

答案 1 :(得分:1)

你正在混合一些东西。

当您的脚本运行时,这意味着有一个页面。 在脚本中,您可以通过标题控制状态(“HTTP / 1.1 404 Not Found”); 这说浏览器“未找到”。 最后,页面以404状态提供。该页面的所有输出都是错误的。一切都由你的剧本完成。

当您在htaccess文件中定义404错误页面时,如果apache服务器处理未找到的错误,则显示此页面。这意味着您的浏览器必须访问服务器上不存在的文件。然后显示文件index.php。

标题状态和标题位置不能一起使用。 location命令将状态设置为重定向代码3xx。重定向后,服务器为代码为200的页面提供服务。

您可以做的是,将客户端重定向到服务器上的随机网址。 然后服务器显示404页面。

答案 2 :(得分:0)

首先检查Apache配置中是否启用了.htaccess文件(AllowOverride指令)。您尝试过的ErrorDocument应该可以正常工作!