Проходящий пользовательский агент проходит проверку не работает идеально
Поэтому я создал страницу проверки возраста, которая блокирует доступ сканеров к основному сайту. Однако я добавил некоторый код, который должен позволять сканеру проходить, а не обычным пользователям, если для них не установлен файл cookie. Однако это, кажется, не работает, Facebook просто перенаправляется, что мне нужно для информации открытого графика. Я иду к отладчику и набираю URL для сайта, и он просто показывает, что сканер facebook перенаправлен. Следующая проверка кода не работает вообще, например, когда я меняю сеанс просмотра на googlebot, он перенаправляется.
<?php
if (!in_array($_SERVER['HTTP_USER_AGENT'], array(
'facebookexternalhit/1.0 (+https://www.facebook.com/externalhit_uatext.php)',
'facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)',
'Googlebot/2.1 (+http://www.googlebot.com/bot.html)',
'Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)',
'msnbot/2.0b (+http://search.msn.com/msnbot.htm)'
))) {
if(!isset($_COOKIE['legal'])) {
header("Location: verify.php");
}
if($_COOKIE['legal'] == "no") {
header("Location: http://www.centurycouncil.org/");
}
}
?>
Ниже приведен код, который работает для googlebot и других поисковых роботов, но не работает для Facebook. Facebook просто перенаправляется, если Facebook пытается сканировать.
<?php
if((!strpos($_SERVER['HTTP_USER_AGENT'], "Googlebot")) && (!strpos($_SERVER['HTTP_USER_AGENT'], "bingbot")) && (!strpos($_SERVER['HTTP_USER_AGENT'], "Yahoo! Slurp")) && (!strpos($_SERVER['HTTP_USER_AGENT'], "facebookexternalhit")))
{
if(!isset($_COOKIE['legal'])) {
header("Location: verify.php");
}
if($_COOKIE['legal'] == "no") {
header("Location: http://www.centurycouncil.org/");
}
}
?>
1 ответ
Вы неправильно используете strpos()
, как явно предупреждено на странице документа: http://php.net/strpos
strpos () может и вернет законный 0
если искомая строка находится в начале строки искомой. Но PHP будет интерпретировать это 0
как ложное (иначе провал), что вы получаете ваши плохие перенаправления.
Вы должны использовать операторы строгого сравнения, например
if (strpos($UA, 'facebook') !== false) {
^^^---strict operator, note the extra `=`.
которые проверяют тип и значение переменной, а не только значение. strpos вернет логическое значение FALSE, если совпадение не найдено, но PHP обрабатывает
(false == 0)
как верно, где
(false === 0) // note the extra =
ложно