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

在if语句中组合多个strpos()实现多User Agent判断问题

解决多User Agent访问限制的逻辑错误问题

嘿,我一眼就看出你代码里的问题啦!你原本的逻辑搞反了——你用了||(逻辑或),这意味着只要有一个指定的UA没匹配上,就会触发跳转,但咱们要的是:当所有指定UA都没匹配到的时候,才跳转,这时候得用&&(逻辑与)才行。

先修正你的原始代码

把||换成&&就正常了:

$useragent = $_SERVER['HTTP_USER_AGENT'];
// 当agent1、agent2、agent3都不在UA里时,才跳转
if (strpos($useragent, "agent1") === false && strpos($useragent, "agent2") === false && strpos($useragent, "agent3") === false) {
    header("Location: http://google.com/");
    // 一定要加上exit,防止后续代码继续执行
    exit;
}

更优雅的写法(推荐)

如果以后要加更多允许的UA,写一堆strpos太麻烦,把允许的UA放到数组里维护会更方便:

$allowedAgents = ['agent1', 'agent2', 'agent3'];
$useragent = $_SERVER['HTTP_USER_AGENT'];
$isAllowed = false;

// 遍历所有允许的UA,只要匹配到一个就标记为允许
foreach ($allowedAgents as $agent) {
    if (strpos($useragent, $agent) !== false) {
        $isAllowed = true;
        break;
    }
}

// 不允许的话就跳转
if (!$isAllowed) {
    header("Location: http://google.com/");
    exit;
}

额外提醒

  • 记得在header()之后加上exit或者die(),不然服务器可能会继续执行后面的代码,导致跳转失效或者泄露内容。
  • User Agent是可以被伪造的,这种方式只能做简单的访问限制,不能作为严格的安全验证手段哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 16:07:25