使用php抛出401标头而不重定向
我有一个php函数,它将错误的IP添加到MySQL表中。
然后,我网站上的每个页面都会检查该表,如果找到匹配项,则会抛出一个 HTTP 401 标头。
if(badCrawler()){
header("HTTP/1.1 401 Unauthorized");
header("Location: error401.php");
}
是否可以在不更改URL的情况下执行此操作?
谢谢
我有一个php函数,它将错误的IP添加到MySQL表中。
然后,我网站上的每个页面都会检查该表,如果找到匹配项,则会抛出一个 HTTP 401 标头。
if(badCrawler()){
header("HTTP/1.1 401 Unauthorized");
header("Location: error401.php");
}
是否可以在不更改URL的情况下执行此操作?
谢谢
确定。就在您的 401 标头之后。根本不需要。exit
header("Location...")
if(badCrawler()){
header("HTTP/1.1 401 Unauthorized");
exit;
}
附注:401 通常与身份验证请求结合使用。
从规格:
响应必须包含一个 WWW 身份验证标头字段(第 14.47 节),其中包含适用于所请求资源的质询。
最好使用来拒绝访问,或者即使您希望不良抓取工具认为该页面不再存在:403 Forbidden
404 Not Found
header("HTTP/1.0 404 Not Found");
exit;
请注意,您的 404 响应可能会导致某些浏览器中出现空白页,请参阅此线程中的顶部答案,以完整解释发生这种情况的原因。基本上标题正在工作,但它只是由你来显示任何HTML内容)。
解决方案很简单,在语句之前回显您的内容(或包含单独的文件)。exit
意识到这有点旧,但它在谷歌搜索“php,401s”时弹出。
这里的问题是,当页面重定向到错误401时.php该页面将返回200 OK,因为错误401.php加载正常。如果您真的想显示401页面,那该怎么办?
if(badCrawler()){
header("HTTP/1.1 401 Unauthorized");
include("error401.php");
exit;
}