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

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

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

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

谢谢

最佳答案

当然。在401 header 后仅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语句之前回显您的内容(或包括一个单独的文件)。

关于php - 在不重定向的情况下用php抛出401 header ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15914130/

10-12 15:28