删除特定的机器人

时间:2019-11-10 17:16:34

标签: php bots

我试图删除一个特定的机器人,如SemrushBot或googlebot(可以是其他机器人),但它不起作用。 谢谢

    if(!preg_match('/SemrushBot/i', $_SERVER['HTTP_USER_AGENT']) || !preg_match('/googlebot/i', $_SERVER['HTTP_USER_AGENT']))
    {
      my code to execute
    }

1 个答案:

答案 0 :(得分:1)

劳伦斯·谢罗(Lawrence Cherone)已经给了您提示,但是您将其丢弃了。 由于不正确的集合定义,您在IF语句中始终满足条件。

这是典型的错误,即使是经验丰富的开发人员也无法幸免。 当您处理交集/被求逆的集合的排除项时,总是很难解释复杂的条件(从视觉上重建视觉上的画面)。

您要实现的是检查值是否不属于特定的值集。

要做到这一点,您需要定义一组期望值,然后检查该值是否属于该特定集合,然后您需要将这种检查的结果求反以得到所需结果。

因此,您基本上需要首先检查访客是否是靴子

$isBot = preg_match('/SemrushBot/i', $_SERVER['HTTP_USER_AGENT']) || preg_match('/googlebot/i', $_SERVER['HTTP_USER_AGENT']);

然后将其反转

$humanVisitor =  ! $isBot;
if ( $humanVisitor ){
    //do something specific to human visitors
}

或使用非用户友好的单班轮

if(! ( preg_match('/SemrushBot/i', $_SERVER['HTTP_USER_AGENT']) || preg_match('/googlebot/i', $_SERVER['HTTP_USER_AGENT']) )){
    //do something specific to human visitors
}

我的建议是,如果可能的话,将这种情况分成几行,那么以后进行代码审查的任何人都将在理解您的代码方面没有困难