使用php投掷401标头而不重定向

时间:2013-04-09 23:07:21

标签: php http header

我有一个php函数,可以将错误的IP添加到MySQL表中。

我的网站上的每个页面都会检查该表,并在找到匹配项时抛出HTTP 401标头。

if(badCrawler()){
    header("HTTP/1.1 401 Unauthorized");
    header("Location: error401.php");
}

是否可以在不更改网址的情况下执行此操作?

由于

2 个答案:

答案 0 :(得分:43)

不确定。 401标题后只需exit。根本不需要header("Location...")

if(badCrawler()){
    header("HTTP/1.1 401 Unauthorized");
    exit;
}

附注:401通常与身份验证请求一起使用。

来自the specs

响应必须包含一个WWW-Authenticate头字段(第14.47节),其中包含适用于所请求资源的质询。

最好使用403 Forbidden拒绝访问,如果您希望错误的抓取工具认为该网页不再存在,则可能更好404 Not Found

header("HTTP/1.0 404 Not Found");
exit;

发送内容

请注意,您的404响应可能会在某些浏览器中显示空白页面,请参阅this thread中的最佳答案,以获取有关原因的完整说明。基本上标题是有效的,但是由你来显示任何HTML内容。

解决方案很简单,在exit语句之前回显您的内容(或包含单独的文件)。

答案 1 :(得分:6)

意识到这有点旧,但它出现在谷歌搜索“php,401s”。

这里的问题是,当页面重定向到error401.php 时,页面将返回200 OK,因为error401.php加载正常。如果你真的想要显示401页面,那该怎么样?

if(badCrawler()){
     header("HTTP/1.1 401 Unauthorized");
     include("error401.php");
     exit;
}