За последние 24 часа нас посетили 34804 программиста и 1755 роботов. Сейчас ищут 819 программистов ...

Как сделать редирект или перенаправление для бота?

Тема в разделе "PHP для новичков", создана пользователем Bridun, 10 янв 2018.

Метки:
  1. Bridun

    Bridun Новичок

    С нами с:
    2 окт 2017
    Сообщения:
    71
    Симпатии:
    1
    Есть маленький сайт с 10 страниц на них стоит счетчик посещений на файле через ip , боты накручивают, как избавиться от этого , как сделать если бот то проехали а если человек +1 я тут нашел какойто код но оно не работает или я не понимаю как его правильно подключить

    PHP:
    1.    function is_bot()
    2. {
    3.     if (!empty($_SERVER['HTTP_USER_AGENT'])) {
    4.         $options = array(
    5.             'YandexBot', 'YandexAccessibilityBot', 'YandexMobileBot','YandexDirectDyn',
    6.             'YandexScreenshotBot', 'YandexImages', 'YandexVideo', 'YandexVideoParser',
    7.             'YandexMedia', 'YandexBlogs', 'YandexFavicons', 'YandexWebmaster',
    8.             'YandexPagechecker', 'YandexImageResizer','YandexAdNet', 'YandexDirect',
    9.             'YaDirectFetcher', 'YandexCalendar', 'YandexSitelinks', 'YandexMetrika',
    10.             'YandexNews', 'YandexNewslinks', 'YandexCatalog', 'YandexAntivirus',
    11.             'YandexMarket', 'YandexVertis', 'YandexForDomain', 'YandexSpravBot',
    12.             'YandexSearchShop', 'YandexMedianaBot', 'YandexOntoDB', 'YandexOntoDBAPI',
    13.             'Googlebot', 'Googlebot-Image', 'Mediapartners-Google', 'AdsBot-Google',
    14.             'Mail.RU_Bot', 'bingbot', 'Accoona', 'ia_archiver', 'Ask Jeeves',
    15.             'OmniExplorer_Bot', 'W3C_Validator', 'WebAlta', 'YahooFeedSeeker', 'Yahoo!',
    16.             'Ezooms', '', 'Tourlentabot', 'MJ12bot', 'AhrefsBot', 'SearchBot', 'SiteStatus',
    17.             'Nigma.ru', 'Baiduspider', 'Statsbot', 'SISTRIX', 'AcoonBot', 'findlinks',
    18.             'proximic', 'OpenindexSpider','statdom.ru', 'Exabot', 'Spider', 'SeznamBot',
    19.             'oBot', 'C-T bot', 'Updownerbot', 'Snoopy', 'heritrix', 'Yeti',
    20.             'DomainVader', 'DCPbot', 'PaperLiBot'
    21.         );
    22.  
    23.         foreach($options as $row) {
    24.             if (stripos($_SERVER['HTTP_USER_AGENT'], $row) !== false) {
    25.                 return true;
    26.             }
    27.         }
    28.     }
    29.  
    30.     return false;
    31. }
     
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Просто вставить его в ваш код, куда вам надо. И, там, где хотите проверить бот или не бот пришел, пришете

    PHP:
    1. if (is_bot()){
    2. //Действия для бота
    3. } else{
    4. //Действия для человека
    5. }
     
  3. Bridun

    Bridun Новичок

    С нами с:
    2 окт 2017
    Сообщения:
    71
    Симпатии:
    1
    спасибо шото не работает так
     
  4. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Я сказал, как использовать функцию. Просто вызвать ее. Если вернет true, значит бот зашел, если false - человек. А как в ыэто поняли, куда что пишете и тд - это уже к телепатам. Код в студию.
     
  5. Bridun

    Bridun Новичок

    С нами с:
    2 окт 2017
    Сообщения:
    71
    Симпатии:
    1
    вот так делаю все время показывает Посетитель записываю в лог на сайте пробовал вызывать ботов через яндекс шаре хотя боты заходили Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)


    PHP:
    1. function is_bot()
    2. {
    3.     if (!empty($_SERVER['HTTP_USER_AGENT'])) {
    4. $list = array(
    5.            'vkShare','Google','VKontakte','FacebookExternalHit',
    6.             'YandexBot', 'YandexAccessibilityBot', 'YandexMobileBot','YandexDirectDyn',
    7.             'YandexScreenshotBot', 'YandexImages', 'YandexVideo', 'YandexVideoParser',
    8.             'YandexMedia', 'YandexBlogs', 'YandexFavicons', 'YandexWebmaster',
    9.             'YandexPagechecker', 'YandexImageResizer','YandexAdNet', 'YandexDirect',
    10.             'YaDirectFetcher', 'YandexCalendar', 'YandexSitelinks', 'YandexMetrika',
    11.             'YandexNews', 'YandexNewslinks', 'YandexCatalog', 'YandexAntivirus',
    12.             'YandexMarket', 'YandexVertis', 'YandexForDomain', 'YandexSpravBot',
    13.             'YandexSearchShop', 'YandexMedianaBot', 'YandexOntoDB', 'YandexOntoDBAPI',
    14.             'Googlebot', 'Googlebot-Image', 'Mediapartners-Google', 'AdsBot-Google',
    15.             'Mail.RU_Bot', 'bingbot', 'Accoona', 'ia_archiver', 'Ask Jeeves',
    16.             'OmniExplorer_Bot', 'W3C_Validator', 'WebAlta', 'YahooFeedSeeker', 'Yahoo!',
    17.             'Ezooms', '', 'Tourlentabot', 'MJ12bot', 'AhrefsBot', 'SearchBot', 'SiteStatus',
    18.             'Nigma.ru', 'Baiduspider', 'Statsbot', 'SISTRIX', 'AcoonBot', 'findlinks',
    19.             'proximic', 'OpenindexSpider','statdom.ru', 'Exabot', 'Spider', 'SeznamBot',
    20.             'oBot', 'C-T bot', 'Updownerbot', 'Snoopy', 'heritrix', 'Yeti',
    21.             'DomainVader', 'DCPbot', 'PaperLiBot'
    22. );
    23.  
    24.  
    25. //$list = implode("\n", $options);
    26.  
    27.         foreach($list as $botname) {
    28.             if (stripos($_SERVER['HTTP_USER_AGENT'], $botname) !== false) {
    29.                 return true;
    30.             }
    31.         }
    32.     }
    33.  
    34.     return false;
    35. }
    36. if (is_bot()) {$botname = "Бот";} else {$botname = "Посетитель";}
     
  6. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Странно.. Логгируйте все User-агенты, а потом проверяйте, как с ними функция отрабатывает. Мб там в списке просто нет нужной метки.
     
  7. AlexandrS

    AlexandrS Активный пользователь

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    А зачем их, ботов трогать? Защита от визуальной накрутки счетчиков, вот такими вот блокираторами, может привести к печальным последствиям для сайта, т.к. отфильтровать всех ботов вы явно не сможете ибо не всё так просто, а вот получить нагоняй от гугла или яндекса за такие деяния вполне реально!
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.599
    Симпатии:
    1.764
    Да ну. На счётчик и гуглу и яндексу плевать, нагоняй - это если боту совсем другой контент выдавать, чем обычному посетителю.
     
  9. Bridun

    Bridun Новичок

    С нами с:
    2 окт 2017
    Сообщения:
    71
    Симпатии:
    1
    так не буду их трогать просто они пусть индексируют мне счетчик нужно ну хотя на 80% отладить
     
  10. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    За какие? За то, что при их посещении где-то в недрах БД счетчик не увеличился на единичку? Им на это плевать. Им не плевать, когда ты ботам и людям разные страницы отдаешь. Прям вот совсем разные.
     
  11. Bridun

    Bridun Новичок

    С нами с:
    2 окт 2017
    Сообщения:
    71
    Симпатии:
    1
    подскажите еще как чтоб записать тот арай в файл и отдуда читать
     
  12. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    надо делать только по логину
     
  13. Bridun

    Bridun Новичок

    С нами с:
    2 окт 2017
    Сообщения:
    71
    Симпатии:
    1
    немогу сделать какой бот приходил $botname; получилось $botname="Бот"; пишет просто бот а хотелось чтоб в лог писать какой бот чтоб отследить боты там яндекс и вгугле и тд а отстальных банить чтоли
    --- Добавлено ---
    всмысле
     
  14. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    @Bridun увеличивать счётчик, только тогда, когда есть сессия юзера.

    ip всегда меняется
     
  15. AlexandrS

    AlexandrS Активный пользователь

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    Так у тебя переменная $botname сначала с именем бота из массива, переписывается $botname = "бот"
    вот тут переименуйте переменную $botname:
    PHP:
    1. if (is_bot()) {$botname = "Бот";} else {$botname = "Посетитель";}
    или в самом начале, чтоб она не переписывалась новым значением
     
  16. Bridun

    Bridun Новичок

    С нами с:
    2 окт 2017
    Сообщения:
    71
    Симпатии:
    1
    $botname; а так пустое значене приходит
     
  17. AlexandrS

    AlexandrS Активный пользователь

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    Извиняюсь, у вас же это собственная функция, вы тогда в самой функции возвращайте не TRUE/FALSE, а имя бота или FALSE
     
  18. Bridun

    Bridun Новичок

    С нами с:
    2 окт 2017
    Сообщения:
    71
    Симпатии:
    1
    аааа как намудрить чтоб имя бота показало и как еще тот арай в файл запихнуть и оттуда читать подскажите
     
  19. AlexandrS

    AlexandrS Активный пользователь

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    Как то так:
    PHP:
    1. function is_bot()
    2. {
    3.     if (!empty($_SERVER['HTTP_USER_AGENT'])) {
    4. $list = array(
    5.            'vkShare','Google','VKontakte','FacebookExternalHit',
    6.             'YandexBot', 'YandexAccessibilityBot', 'YandexMobileBot','YandexDirectDyn',
    7.             'YandexScreenshotBot', 'YandexImages', 'YandexVideo', 'YandexVideoParser',
    8.             'YandexMedia', 'YandexBlogs', 'YandexFavicons', 'YandexWebmaster',
    9.             'YandexPagechecker', 'YandexImageResizer','YandexAdNet', 'YandexDirect',
    10.             'YaDirectFetcher', 'YandexCalendar', 'YandexSitelinks', 'YandexMetrika',
    11.             'YandexNews', 'YandexNewslinks', 'YandexCatalog', 'YandexAntivirus',
    12.             'YandexMarket', 'YandexVertis', 'YandexForDomain', 'YandexSpravBot',
    13.             'YandexSearchShop', 'YandexMedianaBot', 'YandexOntoDB', 'YandexOntoDBAPI',
    14.             'Googlebot', 'Googlebot-Image', 'Mediapartners-Google', 'AdsBot-Google',
    15.             'Mail.RU_Bot', 'bingbot', 'Accoona', 'ia_archiver', 'Ask Jeeves',
    16.             'OmniExplorer_Bot', 'W3C_Validator', 'WebAlta', 'YahooFeedSeeker', 'Yahoo!',
    17.             'Ezooms', '', 'Tourlentabot', 'MJ12bot', 'AhrefsBot', 'SearchBot', 'SiteStatus',
    18.             'Nigma.ru', 'Baiduspider', 'Statsbot', 'SISTRIX', 'AcoonBot', 'findlinks',
    19.             'proximic', 'OpenindexSpider','statdom.ru', 'Exabot', 'Spider', 'SeznamBot',
    20.             'oBot', 'C-T bot', 'Updownerbot', 'Snoopy', 'heritrix', 'Yeti',
    21.             'DomainVader', 'DCPbot', 'PaperLiBot'
    22. );
    23.  
    24.         foreach($list as $key => $botname) {
    25.             if (stripos($_SERVER['HTTP_USER_AGENT'], $botname) !== false) {
    26.                 return $list[$key]; // получаем имя бота из массива
    27.             }
    28.         }
    29.     }
    30.     return false;
    31. }
    32.  
    33. $name = is_bot();
    34.  
    35. if ($name) {
    36. $botname = "Бот : ".$name ;
    37. } else {
    38. $botname = "Посетитель";
    39. }
     
    Bridun нравится это.
  20. Bridun

    Bridun Новичок

    С нами с:
    2 окт 2017
    Сообщения:
    71
    Симпатии:
    1
    @AlexandrS спасибо, ещебы тот арай в файл запихнуть
     
  21. AlexandrS

    AlexandrS Активный пользователь

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    А зачем?
    Но если очень нужно то вот так:
    Создайте имя файла: botNmaes.dat в нем с новой строки напишите имена ботов, вот так:
    vkShare
    Google
    VKontakte
    acebookExternalHit
    и т.д.

    напишите строку кода:
    вместо массива
    PHP:
    1. $list = file("./botNames.dat", FILE_IGNORE_NEW_LINES);
    Но я думаю это лишнее, т.к. я бы вообще поставил бы и проверку на доступность/существование файла, раз уж бы его читаем, кроме всего этого и время на выполнение скрипта уже будет больше. Массивчик то маленький.
     
  22. Bridun

    Bridun Новичок

    С нами с:
    2 окт 2017
    Сообщения:
    71
    Симпатии:
    1
    я вот так делал
    PHP:
    1. $list = file("data/bot.dat");
    2. $result = array();
    3.  
    4.        foreach($list as $key => $botname) {
    5.          
    6.             if (stripos($_SERVER['HTTP_USER_AGENT'], $botname) !== false) {
    7.                 return $result[$list[$key]]; // получаем имя бота из массива
    8.             }
    9.         }
    10.     }
    11.     return false;
    12. }
    --- Добавлено ---
    @AlexandrS и еще если вас не затруднит хочу записывать в тот файл из админки через пост , вот подскажите как сделать если в файле скажем есть уже гуглебот чтоб не повторялись строки
     
  23. AlexandrS

    AlexandrS Активный пользователь

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    Не совсем понял вопроса "через пост" - это "через POST"? Ну а чтоб дублей не было, нужно прочитать содержимое файла в массив и проверить есть ли такое значение в массиве через in_array(). Как то так.
     
  24. Bridun

    Bridun Новичок

    С нами с:
    2 окт 2017
    Сообщения:
    71
    Симпатии:
    1
    есть маленькая админка и чтоб потом когда найду бота ну чтоб не искать в файле азаписать в админке через форму как проверять если есть такая запись
     
  25. AlexandrS

    AlexandrS Активный пользователь

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    Вроде, как человек, не сказал, что он будет делать с этими ботами, если прятать счетчик, это одно, а если показывать боту пустую страницу либо редиректить, то это другое. Поэтому я и предупредил, человека, что за не правильное обращение с ботами, можно получить нагоняй.
    Как говорится "Предупрежден, значит вооружен."
    А там уже дело каждого.