36

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

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

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

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

谢谢

4

2 回答 2

70

当然。就exit在您的 401 标头之后。header("Location...")根本不需要。

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

旁注:401 通常与身份验证请求结合使用。

规格

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

403 Forbidden使用拒绝访问可能会更好,或者即使404 Not Found您希望不良爬虫认为该页面不再存在:

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

发送内容

请注意,您的 404 响应可能会导致某些浏览器中出现空白页面,请参阅此线程中的最佳答案以获取有关发生这种情况的完整解释。基本上标题是工作的,但它只是由你来显示任何 HTML 内容)。

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

于 2013-04-09T23:08:33.847 回答
12

知道这有点旧,但它在谷歌搜索“php,401s”时弹出。

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

if(badCrawler()){
     header("HTTP/1.1 401 Unauthorized");
     include("error401.php");
     exit;
}
于 2014-11-16T08:53:38.553 回答