在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
相关产品推荐
相关产品推荐

