找回密码
 快速注册
搜索
查看: 6|回复: 1

Discuz如何区分人类游客与爬虫

[复制链接]

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2024-11-4 04:09 |阅读模式
Discuz设计了一个NOROBOT变量,当这个变量为true 的时候,定义中的搜索引擎都会无法访问,默认比如在post.php里面开头就定义了define('NOROBOT', TRUE);

查看common.inc.php,可以看到如下函数
  1. getrobot();
  2. if(defined('NOROBOT') && IS_ROBOT) {
  3. exit(header("HTTP/1.1 403 Forbidden"));
  4. }
复制代码

可见,如果discuz调用getrobot()函数发现来访者是蜘蛛,就返回http 403禁止访问的错误提示

getrobot()函数是在global.func.php被定义的
  1. function getrobot() {
  2. if(!defined('IS_ROBOT')) {
  3.    $kw_spiders = 'Bot|Crawl|Spider|slurp|sohu-search|lycos|robozilla';
  4.    $kw_browsers = 'MSIE|Netscape|Opera|Konqueror|Mozilla';
  5.    if(!strexists($_SERVER['HTTP_USER_AGENT'], 'http://') && preg_match("/($kw_browsers)/i", $_SERVER['HTTP_USER_AGENT'])) {
  6.    define('IS_ROBOT', FALSE);
  7.    } elseif(preg_match("/($kw_spiders)/i", $_SERVER['HTTP_USER_AGENT'])) {
  8.    define('IS_ROBOT', TRUE);
  9.    } else {
  10.    define('IS_ROBOT', FALSE);
  11.    }
  12. }
  13. return IS_ROBOT;
  14. }
复制代码

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2024-11-4 04:11
建议在“在线会员列表”中,使用getrobot()函数,把“爬虫”单独归为一类显示。

手机版|悠闲数学娱乐论坛(第3版)

GMT+8, 2025-3-4 12:21

Powered by Discuz!

× 快速回复 返回顶部 返回列表