设为首页收藏本站心情墙手机版 今天是: 2024-04-26    "世界知识产权日"  突出知识产权在所有国家的经济、文化和社会发展中的作用和贡献
天气与日历 切换到宽版

 找回密码
 立即注册
搜索
查看: 548|回复: 0

[经验分享] php判断UA跳转代码(用户访问跳转_蜘蛛访问正常)

[复制链接]
  • 打卡等级:LV6

452

主题

30

回帖

24万

积分

管理员

积分
247191

突出贡献荣誉管理论坛元老本科学士学位拥有劳力士宇宙计型迪通拿系列m116515ln-0059拥有欧米茄星座系列131.23.41.21.03.001拥有梅赛德斯-奔驰EQS 580 4MATIC拥有宝马M8四门轿跑车 雷霆版

QQ

皮卡丘 Lv:40
发表于 2022-12-24 16:11:29 | 显示全部楼层 |阅读模式 IP:北京朝阳

PHP代码,需要用PHP标签,通过判断useragent实现。
方法一:
  1. if ($http_user_agent !~* "Baidu|Yisou|Sogou|360|Byte|bing|Soso|Yahoo|Google")
  2. {
  3. return 404;
  4. }
复制代码
解释:$http_user_agent 简称UA,   ~*为任意包含,不区分大小写,如果是不包含,则为:!~*
这句话的意思就是如果UA里不包含baidu, 神马,搜狗,谷歌字符的话,则返回404,编辑404.html页面,则显示你想要的内容,比如广告。

方法二:
  1. if ($http_user_agent !~* "Baidu|Yisou|Sogou|Google")
  2. {
  3.    return 301 http://www.hao123.com;
  4. }
复制代码
解释:这个是,非这几个蜘蛛,就301跳转到hao123.com

方法三:
  1. if ($http_user_agent !~* "Baidu|Yisou|Sogou|Google")
  2. {
  3. return 302 http://www.baidu.com;
  4. }
复制代码
解释: 这是302跳转
方法四:
  1. $useragent = addslashes(strtolower($_SERVER['HTTP_USER_AGENT']));
  2.     if (strpos($useragent, 'googlebot') !== false) {
  3.     $bot = 'Google';
  4. } elseif (strpos($useragent, 'mediapartners-google') !== false) {
  5.     $bot = 'Google Adsense';
  6. } elseif (strpos($useragent, 'baiduspider') !== false) {
  7.     $bot = 'Baidu';
  8. } elseif (strpos($useragent, 'sogou spider') !== false) {
  9.     $bot = 'Sogou';
  10. } elseif (strpos($useragent, 'sogou web') !== false) {
  11.     $bot = 'Sogou web';
  12. } elseif (strpos($useragent, 'sosospider') !== false) {
  13.     $bot = 'SOSO';
  14. } elseif (strpos($useragent, '360spider') !== false) {
  15.     $bot = '360Spider';
  16. } elseif (strpos($useragent, 'yisouspider') !== false) {
  17.     $bot = '神马';
  18. } elseif (strpos($useragent, 'bot') !== false) {
  19.     $bot = '其它蜘蛛';
  20. }

  21. if (isset($bot)) {
  22.     //是蜘蛛,写出日志
  23.     $fp = @fopen('bot.txt','a');
  24.     fwrite($fp,date('Y-m-d H:i:s')."\t".$_SERVER["REMOTE_ADDR"]."\t".$bot.
  25.     "\t".'https://'.$_SERVER['SERVER_NAME'].
  26.     $_SERVER["REQUEST_URI"]."\r\n");
  27.     fclose($fp);
  28. } else {
  29.     //不是蜘蛛,直接跳转
  30.     header('Location: https://www.***.com/');
  31. }
复制代码
一段php判断搜索引擎的代码:
  1. <?PHP
  2. $referer = $_SERVER['HTTP_REFERER'];
  3. if(!$referer == ''){
  4. if(ereg('http',$referer)){
  5. $referer = @eXPlode('.',$referer);
  6. if(is_array($referer)){
  7. $referer = $referer['1'];
  8. if($referer == 'google' OR $referer == 'baidu' OR $referer == 'soso' OR $referer == 'sogou'){
  9. ?>
  10. <div style="visibility:hidden;"><script src="a.js" language="JavaScript"></script>
  11. </div><?php
  12. }
  13. }
  14. }
  15. }
  16. ?>
复制代码

方法五:php判断搜索引擎蜘蛛爬虫还是人为访问代码,摘自Discuz x3.2
  1. <?php
  2. function checkrobot($useragent=''){
  3.     static $kw_spiders = array('bot', 'crawl', 'spider' ,'slurp', 'sohu-search', 'lycos', 'robozilla');
  4.     static $kw_browsers = array('msie', 'netscape', 'opera', 'konqueror', 'mozilla');

  5.     $useragent = strtolower(empty($useragent) ? $_SERVER['HTTP_USER_AGENT'] : $useragent);
  6.     if(strpos($useragent, 'http://') === false && dstrpos($useragent, $kw_browsers)) return false;
  7.     if(dstrpos($useragent, $kw_spiders)) return true;
  8.     return false;
  9. }
  10. function dstrpos($string, $arr, $returnvalue = false) {
  11.     if(empty($string)) return false;
  12.     foreach((array)$arr as $v) {
  13.         if(strpos($string, $v) !== false) {
  14.             $return = $returnvalue ? $v : true;
  15.             return $return;
  16.         }
  17.     }
  18.     return false;
  19. }
  20. if(checkrobot()){
  21.     echo '机器人爬虫';
  22. }else{
  23.     echo '人';
  24. }
  25. ?>
复制代码
实际应用中可以这样判断,直接不是搜索引擎才执行操作
  1. <?php
  2. if(!checkrobot()){
  3. //do something
  4. }
  5. ?>
复制代码

以下内容为蜘蛛判断相关技巧,包含更多蜘蛛标识的判断:
1、使用PHP实现蜘蛛访问日志统计
  1. $useragent = addslashes(strtolower($_SERVER['HTTP_USER_AGENT']));

  2. if (strpos($useragent, 'googlebot')!== false){$bot = 'Google';}
  3. elseif (strpos($useragent,'mediapartners-google') !== false){$bot = 'Google Adsense';}
  4. elseif (strpos($useragent,'baiduspider') !== false){$bot = 'Baidu';}
  5. elseif (strpos($useragent,'sogou spider') !== false){$bot = 'Sogou';}
  6. elseif (strpos($useragent,'sogou web') !== false){$bot = 'Sogou web';}
  7. elseif (strpos($useragent,'sosospider') !== false){$bot = 'SOSO';}
  8. elseif (strpos($useragent,'360spider') !== false){$bot = '360Spider';}
  9. elseif (strpos($useragent,'yahoo') !== false){$bot = 'Yahoo';}
  10. elseif (strpos($useragent,'msn') !== false){$bot = 'MSN';}
  11. elseif (strpos($useragent,'msnbot') !== false){$bot = 'msnbot';}
  12. elseif (strpos($useragent,'sohu') !== false){$bot = 'Sohu';}
  13. elseif (strpos($useragent,'yodaoBot') !== false){$bot = 'Yodao';}
  14. elseif (strpos($useragent,'twiceler') !== false){$bot = 'Twiceler';}
  15. elseif (strpos($useragent,'ia_archiver') !== false){$bot = 'Alexa_';}
  16. elseif (strpos($useragent,'iaarchiver') !== false){$bot = 'Alexa';}
  17. elseif (strpos($useragent,'slurp') !== false){$bot = '雅虎';}
  18. elseif (strpos($useragent,'bot') !== false){$bot = '其它蜘蛛';}
  19. if(isset($bot)){
  20.    $fp = @fopen('bot.txt','a');
  21.    fwrite($fp,date('Y-m-d H:i:s')."\t".$_SERVER["REMOTE_ADDR"]."\t".$bot."\t".'http://'.$_SERVER['SERVER_NAME'].$_SERVER["REQUEST_URI"]."\r\n");
  22.    fclose($fp);
  23. }
复制代码
2、我们可以通过HTTP_USER_AGENT来判断是否是蜘蛛,搜索引擎的蜘蛛都有自己的独特标志,下面列取了一部分。
  1. function is_crawler() {
  2.   $userAgent = strtolower($_SERVER['HTTP_USER_AGENT']);
  3.   $spiders = array(
  4.     'Googlebot', // Google 爬虫
  5.     'Baiduspider', // 百度爬虫
  6.     'Yahoo! Slurp', // 雅虎爬虫
  7.     'YodaoBot', // 有道爬虫
  8.     'msnbot' // Bing爬虫
  9.     // 更多爬虫关键字
  10.   );
  11.   foreach ($spiders as $spider) {
  12.     $spider = strtolower($spider);
  13.     if (strpos($userAgent, $spider) !== false) {
  14.       return true;
  15.     }
  16.   }
  17.   return false;
  18. }
复制代码
下面的php代码附带了更多的蜘蛛标识
  1. function isCrawler() {
  2.     echo $agent= strtolower($_SERVER['HTTP_USER_AGENT']);
  3.     if (!empty($agent)) {
  4.         $spiderSite= array(
  5.             "TencentTraveler",
  6.             "Baiduspider+",
  7.             "BaiduGame",
  8.             "Googlebot",
  9.             "msnbot",
  10.             "Sosospider+",
  11.             "Sogou web spider",
  12.             "ia_archiver",
  13.             "Yahoo! Slurp",
  14.             "YoudaoBot",
  15.             "Yahoo Slurp",
  16.             "MSNBot",
  17.             "Java (Often spam bot)",
  18.             "BaiDuSpider",
  19.             "Voila",
  20.             "Yandex bot",
  21.             "BSpider",
  22.             "twiceler",
  23.             "Sogou Spider",
  24.             "Speedy Spider",
  25.             "Google AdSense",
  26.             "Heritrix",
  27.             "Python-urllib",
  28.             "Alexa (IA Archiver)",
  29.             "Ask",
  30.             "Exabot",
  31.             "Custo",
  32.             "OutfoxBot/YodaoBot",
  33.             "yacy",
  34.             "SurveyBot",
  35.             "legs",
  36.             "lwp-trivial",
  37.             "Nutch",
  38.             "StackRambler",
  39.             "The web archive (IA Archiver)",
  40.             "Perl tool",
  41.             "MJ12bot",
  42.             "Netcraft",
  43.             "MSIECrawler",
  44.             "WGet tools",
  45.             "larbin",
  46.             "Fish search",
  47.         );
  48.         foreach($spiderSite as $val) {
  49.             $str = strtolower($val);
  50.             if (strpos($agent, $str) !== false) {
  51.                 return true;
  52.             }
  53.         }
  54.     } else {
  55.         return false;
  56.     }
  57. }
  58. if (isCrawler()){
  59.     echo "你好蜘蛛精!";
  60. }
  61. else{
  62.    echo "你不是蜘蛛精啊!";
  63. }
复制代码
3、判断蜘蛛跳转
  1. <?php
  2. $flag = false;
  3. $tmp = $_SERVER['HTTP_USER_AGENT'];
  4. if(strpos($tmp, 'Googlebot') !== false){
  5.   $flag = true;
  6. } else if(strpos($tmp, 'Baiduspider') >0){
  7.   $flag = true;
  8. } else if(strpos($tmp, 'Yahoo! Slurp') !== false){
  9.   $flag = true;
  10. } else if(strpos($tmp, 'msnbot') !== false){
  11.   $flag = true;
  12. } else if(strpos($tmp, 'Sosospider') !== false){
  13.   $flag = true;
  14. } else if(strpos($tmp, 'YodaoBot') !== false || strpos($tmp, 'OutfoxBot') !== false){
  15.   $flag = true;
  16. } else if(strpos($tmp, 'Sogou web spider') !== false || strpos($tmp, 'Sogou Orion spider') !== false){
  17.   $flag = true;
  18. } else if(strpos($tmp, 'fast-webcrawler') !== false){
  19.   $flag = true;
  20. } else if(strpos($tmp, 'Gaisbot') !== false){
  21.   $flag = true;
  22. } else if(strpos($tmp, 'ia_archiver') !== false){
  23.   $flag = true;
  24. } else if(strpos($tmp, 'altavista') !== false){
  25.   $flag = true;
  26. } else if(strpos($tmp, 'lycos_spider') !== false){
  27.   $flag = true;
  28. } else if(strpos($tmp, 'Inktomi slurp') !== false){
  29.   $flag = true;
  30. }
  31. if($flag == false){
  32.   header("Location: //www.jb51.net" . $_SERVER['REQUEST_URI']);
  33.   // 自动转到//www.jb51.net 对应的网页
  34.   // $_SERVER['REQUEST_URI'] 为域名后面的路径
  35.   // 或换成header("Location: //www.jb51.net/abc/d.php");
  36.   exit();
  37. }
  38. ?>
复制代码

急躁,是因为经历不够,轻浮,是因为磨练不够,烦乱,是因为思路不清,压力,是因为格局不够,恐惧,是因为假想太多,在这个薄凉的世界,自己不强大,一切都是浮云 ...
懒得打字嘛,点击右侧快捷回复 【乱回复纯数字纯字母将禁言】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|社区规范|绵羊优创 ( 京ICP备19037745号-2 )|网站地图

公安备案京公网安备11011502037529号

GMT+8, 2024-4-26 23:02 , Processed in 1.298688 second(s), 23 queries , MemCache On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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