You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP反爬虫脚本如何让真实用户停留在当前访问URL不重定向

问题根因

当前问题源于反爬虫脚本的原生逻辑缺陷:无论用户访问站点下的哪个路径,只要被判定为真实用户,都会强制重定向到站点首页,同时执行die()终止程序,导致后续页面业务逻辑完全无法执行。
之前将else分支改为返回401未生效的原因是:该分支对应真实用户的判定结果,修改后所有真实用户访问都会直接返回401状态码,自然无法正常访问页面。

修复方案

仅需要修改脚本末尾的判定逻辑,删除真实用户分支的重定向和终止逻辑,让网站原有业务代码正常执行即可:

修改前代码

if($Antibot->check() == true){
    die(header("location: ".$config_antibot['bot']));
}else{
    die(header("location: ".$config_antibot['real']));
}

修改后代码

if($Antibot->check() == true){
    // 仅判定为爬虫时执行跳转并终止程序
    header("Location: " . $config_antibot['bot'], true, 302);
    exit();
}
// 判定为真实用户时不做任何处理,直接执行后续网站原有代码
可选优化建议
  • 给curl请求增加超时配置,避免反爬虫接口故障导致全站无法访问:
    在httpGet方法的curl配置中增加两行:
    curl_setopt($ch, CURLOPT_TIMEOUT, 2); // 接口请求超时时间设为2秒
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1); // 连接超时时间设为1秒
    
  • 增加路径白名单,对激活页、API接口等不需要校验的路径直接跳过反爬虫检查,减少不必要的性能损耗:
    在调用$Antibot->check()前增加白名单判断逻辑:
    // 白名单路径前缀,可根据需求增减
    $white_path_prefix = [
        '/user/', // 用户激活相关路径
        '/api/' // 接口相关路径
    ];
    $current_path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
    foreach ($white_path_prefix as $prefix) {
        // PHP8.0及以上版本可用str_starts_with
        if (str_starts_with($current_path, $prefix)) {
            // 匹配到白名单直接跳过后续反爬虫校验
            return;
        }
        // 低于PHP8.0版本可替换为以下判断逻辑
        // if (substr($current_path, 0, strlen($prefix)) === $prefix) {
        //     return;
        // }
    }
    
  • 重定向跳转时建议补全状态码,避免浏览器缓存异常跳转规则。

内容的提问来源于stack exchange,提问作者anchor luxury

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 05:36:02