Disable Ajax for Spiders

时间:2014-03-23 作者:atwellpub

我们在wpegnine上有一个网站,每天访问量约为2万次,在很大程度上依赖ajax作为我们的入站营销策略(潜在客户/访客处理)。

这些ajax调用正在破坏我们的服务器性能。

我认为,缓解我们的问题的一个好方法是为爬行器禁用对wp admin的所有AJAX调用。

他们不需要看到我们对行动的动态调用,我们也不需要任何访问者跟踪这些蜘蛛。

我们如何设置我们的机器人。txt或更好的解决方案中的代码可以防止爬行器使用这些资源?

1 个回复
SO网友:atwellpub

这里有一个编程方法。它的作用是检查ajax请求是否正在运行,以及useragent是否在定义的白名单中,如果在白名单中,它将继续正常加载wp,否则它将死亡。我使用registered\\u分类法,因为它是钩子加载过程中的第二个钩子:

http://codex.wordpress.org/Plugin_API/Action_Reference

我将把它添加到主题函数中。php和测试:

/* Disable AJAX for Spiders */
add_action( \'registered_taxonomy\' , \'disable_ajax_for_spiders\' );

function disable_ajax_for_spiders() {

    if ( !defined(\'DOING_AJAX\') || !DOING_AJAX ) {
        return;
    }

    if ( !isset($_SERVER[\'HTTP_USER_AGENT\']) )  {
        return;
    }

    $visitor_useragent = strtolower($_SERVER[\'HTTP_USER_AGENT\']);

    $useragents[] = \'msie\';
    $useragents[] = \'firefox\';
    $useragents[] = \'webkit\';
    $useragents[] = \'opera\';
    $useragents[] = \'netscape\';
    $useragents[] = \'konqueror\';
    $useragents[] = \'gecko\';
    $useragents[] = \'chrome\';
    $useragents[] = \'songbird\';
    $useragents[] = \'seamonkey\';
    $useragents[] = \'flock\';
    $useragents[] = \'AppleWebKit\';
    $useragents[] = \'Android\';
    $useragents[] = \'Lynx\';
    $useragents[] = \'Dillo\';

    /* If useragent in list then bail - else die() immediately*/ 
    if ($visitor_useragent)
    {
        foreach ($useragents as $k=>$useragent)
        {
            $useragent = trim($useragent);
            if ($useragent)
            {
                if(stristr($visitor_useragent, $useragent)||$useragent==\'*\')
                {
                    return;
                }
            }
        }
    }

    die();
}

结束

相关推荐

WP_UPDATE_POST从前端通过AJAX

设置:浏览器中有三个打开的选项卡:选项卡1:管理员编辑帖子选项卡2:“编辑模式”下该帖子的前端视图选项卡3:“非编辑”模式下的前端视图(默认请求)我在选项卡2(前端编辑)上编辑帖子,并通过AJAX(通过wp_update_post). 刷新此选项卡或选项卡3时,可以看到更改。但当我刷新选项卡1(WP后端编辑帖子页面)时,我在编辑器中看到了旧内容,但添加了新修订。当我硬刷新该页面时,它按预期工作。(这可能会让编辑很困惑)那么,为什么它只对硬刷新有效,而对正常刷新无效呢?是否有任何类型的缓存处于活动状态?(在