Доброго времени суток, уважаемые специалисты.
Нашёл код в сети (блокирует куда не нужно ходящих ботов по IP адресу через htaccess), отредактировал его, но видимо не совсем корректно, не работает вот какой момент - исключение по User Agent браузера (там изначально исключение для IP адресов было).
Где ошибся и как правильно должно быть?
<?php
require_once(rtrim($_SERVER['DOCUMENT_ROOT'], '/') . '/wp-load.php');
$ip = $_SERVER['REMOTE_ADDR'];
$htaccess = '.htaccess';
$contents = file_get_contents($htaccess, TRUE)
OR exit('Unable to open .htaccess');
$exists = !stripos($contents, 'deny from ' . $ip . "\n")
OR exit('Already banned, nothing to do here.');
$date = date('Y-m-d H:i:s');
$uri = htmlspecialchars($_SERVER['REQUEST_URI'], ENT_QUOTES);
$agent = htmlspecialchars($_SERVER['HTTP_USER_AGENT'], ENT_QUOTES);
$agent = str_replace(array("\n", "\r"), '', $agent);
$email = '';
$whitelist = array(
'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3855.80 Safari/537.36 OPR/62.0.3416.60',
'YandexBot;',
'YandexAccessibilityBot',
'Googlebot',
'bingbot',
'Twitterbot',
'proximic',
'Applebot',
'Mail.RU_Bot',
'msnbot',
);
if (empty($_SERVER['HTTP_REFERER'])) {
if (in_array($agent, $whitelist)) {
echo "";
} else {
$ban = "\n# The IP below was banned on $date for trying to access {$uri}\n";
$ban .= "# Agent: {$agent}\n";
$ban .= "# Deny from {$ip}\n";
file_put_contents($htaccess, $ban, FILE_APPEND)
OR exit('Cannot append rule to .htaccess');
if (!empty($email)) {
$message = "IP Адрес: {$ip}\n";
$message .= "Дата/Время: {$date}\n";
$message .= "Пользовательский Агент: {$agent}\n";
wp_mail($email, 'Произошла блокировка по User Agent: ' . $ip, $message);
}
}
} ?>