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

Jms*_*Bnd 24 php header http

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

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

if(badCrawler()){
    header("HTTP/1.1 401 Unauthorized");
    header("Location: error401.php");
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢

jsz*_*ody 48

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

if(badCrawler()){
    header("HTTP/1.1 401 Unauthorized");
    exit;
}
Run Code Online (Sandbox Code Playgroud)

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

规格:

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

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

header("HTTP/1.0 404 Not Found");
exit;
Run Code Online (Sandbox Code Playgroud)

发送内容

请注意,您的404响应可能会导致某些浏览器出现空白页面,请参阅此主题中的最佳答案,以获得有关原因的完整解释.基本上标题是有效的,但它取决于您显示任何HTML内容).

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


小智 7

意识到这有点旧,但它出现在谷歌搜索"PHP,401s".

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

if(badCrawler()){
     header("HTTP/1.1 401 Unauthorized");
     include("error401.php");
     exit;
}
Run Code Online (Sandbox Code Playgroud)