【问题标题】:Throwing a 401 header with php without redirect在没有重定向的情况下使用 php 抛出 401 标头
【发布时间】:2013-04-01 14:27:51
【问题描述】:

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

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

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

是否可以在不更改网址的情况下做到这一点?

谢谢

【问题讨论】:

  • 您是否尝试删除 header("Location:...") 呼叫?那是重定向。

标签: php http header


【解决方案1】:

当然。在您的 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 语句之前回显您的内容(或包含单独的文件)。

【讨论】:

  • 谢谢,我把它改成了404 Not Found但是页面没有显示错误页面,它只是在退出时终止。
  • 使用header("HTTP/1.0 404 Not Found"),它将发送该标头。您本身可能不会收到“错误”,但如果您检查页面上的标题,您会看到 404。我更新了我的答案,并使用提供更多详细信息的相关线程。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多