Редиректы (.htaccess, nginx, php) и блокировка ботов

Оглавление

Возможно вам пригодятся следующие ссылки:

Не забывайте, что редиректы могут кэшироваться на ПК, поэтому проверять переадресацию лучше на сайте https://bertal.ru/

Протестировать сайт сразу на множество редиректов (https, www, index итд) https://be1.ru/dubli-stranic/

Проверка правил .htaccess на наличие синтаксических ошибок http://www.htaccesscheck.com/

Генератор правил для редиректов https://donatstudios.com/RewriteRule_Generator

Файл .htaccess в котором прописываются настройки веб-сервера работает только в том случае, если на хостинге используется apache, если хостинг полностью работает на nginx, то правила прописанные в .htaccess работать не будут

Так же возможен вариант, при котором не будет работать часть настроек .htaccess, если некоторые функции apache берёт на себя nginx, если не работает что то - уточняйте у хостера.

Учитывайте, что важна так же и последовательность редиректов когда вы их указываете в .htaccess, старайтесь избегать так называемых “двойных” редиректов, старайтесь использовать правильную последовательность и протоколы

############################################################################
### Примеры популярных редиректов                                       ####
############################################################################
RewriteEngine On
# Директива включает редиректы.
RewriteBase /
# Без директивы (.*) = /$1 будет /var/wwww/site/web/$1  с директивой  = /$1
Options +FollowSymLinks
# Разрешает переход по символическим ссылкам.
 
 
############################################################################
#### Перенаправление с одной страницы на другую                         ####
############################################################################
Redirect 301 /test-1/ http://site.ru/test-2/
#Более подробный
RewriteCond %{REQUEST_URI} ^/test/$
RewriteRule ^.*$ http://site.ru/new-test/? [R=301,L]
 
############################################################################
#### Перенаправляем протокол https на http                              ####
############################################################################
RewriteCond %{HTTPS} on
# Проверяем наличие https в URL.
RewriteRule ^.*$ http://%{SERVER_NAME}%{REQUEST_URI}
# Перенаправляем протокол на http.
    
############################################################################
#### Перенаправляем протокол http на https                              ####
############################################################################
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
#Ещё вариант
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
#Для reg.ru
RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
############################################################################
#### Выбор основного зеркала (или с www или без www)                    ####
############################################################################
# 1. Редирект с www на без www. (раскоментировать директивы пункта 1)
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
# Проверяем, содержит ли домен www (в начале URL).
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
# Перенаправляем URL на домен без www.
####
# 2. Редирект без www на www. (раскоментировать директивы пункта 2)
RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
# Проверяем, не содержит ли домен www (в начале URL).
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
# Перенаправляем URL на домен c www.
 
############################################################################
#### Убираем повторяющиеся слеши (/) в URL                              ####
############################################################################
RewriteCond %{THE_REQUEST} //
# Проверяем, повторяется ли слеш (//) более двух раз.
RewriteRule .* /$0 [R=301,L]
# Исключаем все лишние слеши.
# Если надо сразу указать протокол RewriteRule .* https://%{HTTP_HOST}/$0 [R=301,L]
 
############################################################################
#### Убираем слеши в конце URL для статических файлов (содержит точку)  ####
############################################################################
RewriteCond %{REQUEST_URI} \..+$ 
# Если файл содержит точку.
RewriteCond %{REQUEST_FILENAME} !-d  
# И это не директория.
RewriteCond %{REQUEST_FILENAME} -f
# Является файлом.
RewriteCond %{REQUEST_URI} ^(.+)/$     
# И в конце URL есть слеш.
RewriteRule ^(.+)/$ /$1 [R=301,L]    
# Исключить слеш.
 
############################################################################
#### Добавляем слеш(/), если его нет, и это не файл.                    ####
############################################################################
RewriteCond %{REQUEST_URI} !(.*)/$
# Если слеша в конце нет.
RewriteCond %{REQUEST_FILENAME} !-f
# Не является файлом.
RewriteCond %{REQUEST_URI} !\..+$
# В URL нет точки (файл).
RewriteRule ^(.*)$ $1/ [L,R=301]
# Добавляем слеш в конце.
 
############################################################################
#### Удаляем слеш(/), в конце url                                       ####
############################################################################
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} ![^\/]$
RewriteRule ^(.*)\/$ /$1 [R=301,L]
 
############################################################################
#### Убираем index.php, если он есть в конце URL                        ####
############################################################################
RewriteCond %{REQUEST_METHOD} =GET
# Выявляем GET запрос в URL (не POST).
RewriteCond %{REQUEST_URI} ^(.*)/index\.php$
# URL cодержит index.php в конце.
RewriteRule ^(.*)$ %1/ [R=301,L]
# Удалить index.php из URL.
 
# Ещё вариант - Склеиваем дубли главной
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(php|html|htm)\ HTTP/
RewriteRule ^(.*)index\.(php|html|htm)$ $1 [R=301,L]
 
# Ещё вариант
RewriteRule ^index\.php$ / [R=301,L]
RewriteRule ^(.*)/index\.php$ /$1/ [R=301,L]
 
#Modx вариант
RewriteCond %{REQUEST_METHOD} !^POST [NC]
RewriteCond %{REQUEST_METHOD} !^GET [NC]
RewriteCond %{REQUEST_URI} !^/manager [NC]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ (.*)/index\.(php|html|htm)\ HTTP/
RewriteRule ^(.*)index\.(php|html|htm)$ https://site.ru/$1 [R=301,L]
 
############################################################################
#### Все страницы одного домена на главную страницу другого домена      ####
############################################################################
RewriteCond %{REQUEST_URI} (.*)
RewriteRule ^(.*)$ http://site.ru/ [L,R=301]
 
############################################################################
#### Каждая страница одного домена на такой же адрес другого url        ####
############################################################################
RewriteCond %{REQUEST_URI} (.*)
RewriteRule ^(.*)$ http://site.ru/$1 [L,R=301]
 
############################################################################
#### Редирект с одной страницы на другую                                ####
############################################################################
Redirect 301 /test-1/ http://site.ru/test-2/
#Расширенный вариант, если не работает простой
RewriteCond %{REQUEST_URI} ^/test/$
RewriteRule ^.*$ http://site.ru/new-test/? [R=301,L]
 
############################################################################
#### Компрессия статического контента                                   ####
############################################################################

    ExpiresActive on
    ExpiresDefault                                      "access plus 1 year"
    # CSS
    ExpiresByType text/css                              "access plus 1 year"
    # Data interchange
    ExpiresByType application/atom+xml                  "access plus 1 hour"
    ExpiresByType application/rdf+xml                   "access plus 1 hour"
    ExpiresByType application/rss+xml                   "access plus 1 hour"
    ExpiresByType application/json                      "access plus 0 seconds"
    ExpiresByType application/ld+json                   "access plus 0 seconds"
    ExpiresByType application/schema+json               "access plus 0 seconds"
    ExpiresByType application/vnd.geo+json              "access plus 0 seconds"
    ExpiresByType application/xml                       "access plus 0 seconds"
    ExpiresByType text/xml                              "access plus 0 seconds"
    # Favicon (cannot be renamed!) and cursor images
    ExpiresByType image/vnd.microsoft.icon              "access plus 1 week"
    ExpiresByType image/x-icon                          "access plus 1 week"
    # JavaScript
    ExpiresByType application/javascript                "access plus 1 year"
    ExpiresByType application/x-javascript              "access plus 1 year"
    ExpiresByType text/javascript                       "access plus 1 year"
    # Manifest files
    ExpiresByType application/manifest+json             "access plus 1 year"
    ExpiresByType application/x-web-app-manifest+json   "access plus 0 seconds"
    ExpiresByType text/cache-manifest                   "access plus 0 seconds"
    # Media files
    ExpiresByType audio/ogg                             "access plus 1 year"
    ExpiresByType image/bmp                             "access plus 1 year"
    ExpiresByType image/gif                             "access plus 1 year"
    ExpiresByType image/jpeg                            "access plus 1 year"
    ExpiresByType image/png                             "access plus 1 year"
    ExpiresByType image/svg+xml                         "access plus 1 year"
    ExpiresByType image/svg                             "access plus 1 year"
    ExpiresByType image/webp                            "access plus 1 year"
    ExpiresByType video/mp4                             "access plus 1 year"
    ExpiresByType video/ogg                             "access plus 1 year"
    ExpiresByType video/webm                            "access plus 1 year"
    # Embedded OpenType (EOT)
    ExpiresByType application/vnd.ms-fontobject         "access plus 1 year"
    ExpiresByType font/eot                              "access plus 1 year"
    # OpenType
    ExpiresByType font/opentype                         "access plus 1 year"
    # TrueType
    ExpiresByType application/x-font-ttf                "access plus 1 year"
    # Web Open Font Format (WOFF) 1.0
    ExpiresByType application/font-woff                 "access plus 1 year"
    ExpiresByType application/x-font-woff               "access plus 1 year"
    ExpiresByType font/woff                             "access plus 1 year"
    # Web Open Font Format (WOFF) 2.0
    ExpiresByType application/font-woff2                "access plus 1 year"
    # Other
    ExpiresByType text/x-cross-domain-policy            "access plus 1 week"

############################################################################
#### Конец                                                              ####
############################################################################
#Сжатие файлов если хост поддерживает zlib
php_flag zlib.output_compression On
php_value zlib.output_compression_level 5
 
#Ссылка на страницу 404
ErrorDocument 404 /404.php
 
#Запреты\разрешния, блокировка по IP
Order Allow,Deny
Allow from all
Deny from 123.456.789.123
 
#Включение отображения php ошибок
php_flag display_startup_errors on
php_flag display_errors on
php_flag html_errors on
php_value error_reporting 9999999999999999999999
php_flag log_errors on
php_value error_log PHP_errors.log
<ifModule mod_headers.c>
    #Кэшировать css, javascript и текстовые файлы на месяц
    <FilesMatch "\.(js|css|txt)$">
        Header set Cache-Control "max-age=2592000"
    </FilesMatch>
    #Кэшировать флэш и изображения на месяц
    <FilesMatch "\.(flv|swf|ico|gif|jpg|jpeg|png)$">
        Header set Cache-Control "max-age=2592000"
    </FilesMatch>
</ifModule>
#Сжатие файлов если хост поддерживает zlib
php_flag zlib.output_compression On
php_value zlib.output_compression_level 5
 
#Конструкции вида
<IfModule mod_expires.c>
#...
</IfModule>
#проверяют есть тот или иной модуль на сервере
 
#Ссылка на страницу 404
ErrorDocument 404 /404.php
 
#Запреты\разрешния, блокировка по IP
Order Allow,Deny
Allow from all
Deny from 46.229.168.68
 
#Включение отображения php ошибок
php_flag display_startup_errors on
php_flag display_errors on
php_flag html_errors on
php_value error_reporting 9999999999999999999999
php_flag log_errors on
php_value error_log PHP_errors.log
if (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] == "") {
    /*ВАЖНО укажите верный протокол, или определите его автоматически на том же php*/
    $redirect = "https://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: $redirect");
}
<?php
    // Проверяем наличие кириллицы в декодированном URL
    if (preg_match('/[а-яА-Я]/u', urldecode($_SERVER['REQUEST_URI']))) {
        // URL содержит кириллицу, пропускаем редирект
    } else {
        // Определяем протокол
        $protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https' : 'http';
     
        // Сравниваем исходный URI с преобразованным к нижнему регистру
        if ($_SERVER['REQUEST_URI'] !== strtolower($_SERVER['REQUEST_URI'])) {
            $urlHaveGet = '/\?/i';
     
            if (preg_match($urlHaveGet, $_SERVER['REQUEST_URI']) == 0) {
                // Формируем новый URL с учетом протокола и преобразованного URI
                $new_url = $protocol . '://' . $_SERVER['HTTP_HOST'] . strtolower($_SERVER['REQUEST_URI']);
                header('Location: ' . $new_url, true, 301);
                exit();
            }
        }
    }
?>
    SetEnvIfNoCase ^User-Agent$ .*(BlackWidow|AhrefsBot|BLEXBot|MBCrawler|YaK|niraiya.com|Megaindex|MJ12bot|SemrushBot|cloudfind|CriteoBot|GetIntentCrawler) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(SafeDNSBot|SeopultContentAnalyzer|serpstatbot|LinkpadBot|DataForSeoBot|RomeClient|Scrapy|FlipboardRSS|FlipboardProxy|ZoominfoBot|SeznamBot|SeekportCrawler) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(360Spider|80legs|Abonti|Aboundex|Acunetix|ADmantX|AIBOT|AiHitBot|Aipbot|Alexibot|Alligator|AllSubmitter|Anarchie|Apexoo|ASPSeek|Asterias|Attach|autoemailspider) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(BackDoorBot|BackStreet|BackWeb|Badass|Bandit|BatchFTP|BattleztarBazinga|BBBike|BDFetch|BetaBot|Bigfoot|Bitacle|Blackboard|BlackHole|Blow|BlowFish) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(Boardreader|Bolt|BotALot|Brandprotect|Brandwatch|Bubing|Buddy|BuiltBotTough|BuiltWith|Bullseye|BunnySlippers|BuzzSumo|Calculon|CATExplorador) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(CazoodleBot|CCBot|Cegbfeieh|CheeseBot|CherryPicker|ChinaClaw|Chlooe|Claritybot|Cliqzbot|Cogentbot|cognitiveseo|Collector|Copier|CopyRightCheck) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(Copyscape|Cosmos|Craftbot|CrazyWebCrawler|Crescent|CSHttp|Curious|Custo|DatabaseDriverMysqli|DataCha0s|DBLBot|Demon|Deusu|Devil|DIIbot) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(Dirbuster|Disco|Discobot|Discoverybot|DittoSpyder|DomainAppender|DomainCrawler|DomainSigmaCrawler|Dotbot|DownloadDemon|DownloadDevil) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(DownloadWonder|Dragonfly|Drip|DTSAgent|EasyDL|Ebingbong|eCatch|Ecxi|EirGrabber|EMailCollector|EMailExtractor|EMailSiphon|EMailWolf) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(EroCrawler|Evil|Exabot|ExpressWebPictures|Extractor|ExtractorPro|EyeNetIE|Ezooms|FHscan|Fimap|Findxbot|FlashGet|Flunky|Foobot) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(Freeuploader|FrontPage|Fyrebot|GalaxyBot|Genieo|Getintent|GetRight|GetWeb|Gigablast|Gigabot|Go-Ahead-Got-It|Gotit|GoZilla) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(Grabber|GrabNet|Grafula|GrapeFX|GrapeshotCrawler|GridBot|GT::WWW|HaosouSpider|Harvest|Havij|HEADMasterSEO|Heritrix|Hloader|HMView) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(HTMLparser|HTTP::Lite|HTTrack|Humanlinks|HybridBot|Iblog|IDBot|Id-search|IlseBot|ImageFetch|ImageStripper|ImageSucker|IndyLibrary) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(InfoNaviRobot|InfoTekies|Intelliseek|InterGET|InternetNinja|InternetSeer|internetVistamonitor|Iria|IRLbot|Iskanie|JamesBOT|Jbrofuzz) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(JennyBot|JetCar|JikeSpider|JOCWebSpider|Joomla|Jorgee|JustView|Jyxobot|KenjinSpider|KeywordDensity|Lanshanbot|Larbin|LeechFTP) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(LeechGet|LexiBot|Lftp|LibWeb|Libwhisker|Lightspeedsystems|Likse|Linkdexbot|LinkextractorPro|LinkScan|LinksManager|LinkWalker|LinqiaMetadataDownloaderBot) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(LinqiaRSSBot|LinqiaScrapeBot|Lipperhey|Litemage_walker|Lmspider|LNSpiderguy|Ltx71|lwp-request|LWP::Simple|lwp-trivial|Magnet|Mag-Net) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(magpie-crawler|Majestic12|MarkMonitor|MarkWatch|Masscan|MassDownloader|MataHari|Meanpathbot|Metauri|MFC_Tear_Sample|MicrosoftDataAccess) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(MicrosoftURLControl|MIDowntool|MIIxpc|MisterPiX|Mojeek|MorfeusFuckingScanner|MSFrontPage|MSIECrawler|Msrabot|MSWebServicesClientProtocol) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(Musobot|NameIntelligence|Nameprotect|Navroad|NearSite|Needle|Nessus|NetAnts|Netcraft|netEstateNECrawler|NetLyzer|NetMechanic|NetSpider) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(Nettrack|NetVampire|NetZIP|NextGenSearchBot|Nibbler|NICErsPRO|Niki-bot|Nikto|NimbleCrawler|Ninja|Nmap|NPbot|Nutch|Octopus|OfflineExplorer|OfflineNavigator) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(Openfind|OpenLinkProfiler|Openvas|OrangeBot|OrangeSpider|OutfoxBot|PageAnalyzer|PageGrabber|pagescorer) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(PageScorer|Panscient|PapaFoto|Pavuk|pcBrowser|PECL::HTTP|PeoplePal|PHPCrawl|Picscout|Picsearch|Pimonster|Pi-Monster|Pixray) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(PleaseCrawl|Pockey|POE-Component-Client-HTTP|Probethenet|ProPowerBot|ProWebWalker|Proximic|Psbot|Pump|PyCurl|QueryNMetasearch|Qwantify) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(RankActiveLinkBot|Rankivabot|RealDownload|Reaper|Recorder|RedesScrapy|ReGet|RepoMonkey|Ripper|RocketCrawler|Rogerbot|SalesIntelligent) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(SBIder|ScanAlert|Scanbot|Screaming|ScreenerBot|Searchestate|SearchmetricsBot|Semrush|SEOkicks|SEOkicks-Robot|SEOlyticsCrawler) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(Seomoz|SEOprofiler|seoscanners|SEOstats|Siphon|SISTRIX|SISTRIXCrawler|Sitebeam|SiteExplorer|Siteimprove|SiteLockSpider|SiteSnagger) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(SiteSucker|Sitevigil|Slackbot-LinkExpanding|SlySearch|SmartDownload|Snake|Snapbot|Snoopy|SocialRankIOBot|Sogouwebspider) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(Sosospider|SpaceBison|Spammen|SpankBot|Spanner|Spbot|Spinn3r|SputnikBot|Sqlmap|Sqlworm|Sqworm|Steeler|Stripper|Sucker|Sucuri|SuperBot) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(SuperHTTP|Surfbot|SurveyBot|Suzuran|Swiftbot|Szukacz|T0PHackTeam|T8Abot|tAkeOut|Teleport|TeleportPro|Telesoft|Telesphoreo|Telesphorep) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(TheIntraformant|TheNomad|TightTwatBot|Titan|Toata|Toweyabot|Trendictionbot|True_Robot|Turingos|TurnitinBot|TurnitinRobot) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(TwengaBot|Twice|Typhoeus|UnisterBot|URLy.Warning|URLyWarning|Vacuum|Vagabondo|VBProject|VCI|VeriCiteCrawler|VidibleScraper|VoidEYE|Voil) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(Voltron|WallpapersHD|WASALive-Bot|WBSearchBot|Webalta|WebAuto|WebBandit|WebCollage|WebCopier) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(WEBDAV|WEBDAVClient|WebEnhancer|WebFetch|WebFuck|WebGoIS|WebImageCollector) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(WebLeacher|WebmasterWorldForumBot|webmeup-crawler|WebPix|WebReaper|WebSauger|Webshag|WebsiteExtractor) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(WebsiteExtractor|WebsiteQuester|Webster|WebStripper|WebSucker|WebWhacker|WebZIP|WeSEE) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(Whack|Whacker|Whatweb|Widow|WinHTTrack|WiseGuysRobot|WISENutbot|Wonderbot|Woobot|Wotbox|Wprecon|WPScan|WWW-Collector-E|WWW-Mechanize) HTTP_SAFE_BADBOT
    SetEnvIfNoCase ^User-Agent$ .*(WWW::Mechanize|WWWOFFLE|x22Mozilla|Xaldon_WebSpider|XaldonWebSpider|Xenu|YoudaoBot|Zade|Zermelo|Zeus|Zgrab|Zitebot|ZmEu|ZumBot|ZyBorg) HTTP_SAFE_BADBOT
    Deny from env=HTTP_SAFE_BADBOT

https://www.design-citi.com/blog/podderzhka/blokiruem-spam-s-ip-adresov-biterika-grupp/

Order Allow,Deny
Allow from all
# Block IP addresses and ranges listed in the file
Deny from 5.183.130.0/24
Deny from 31.40.203.0/24
Deny from 45.11.20.0/24
Deny from 45.15.72.0/24
Deny from 45.15.236.0/24
Deny from 45.81.136.0/24
Deny from 45.84.176.0/24
Deny from 45.86.0.0/24
Deny from 45.87.252.0/24
Deny from 45.89.16.0/24
Deny from 45.90.196.0/24
Deny from 45.134.180.0/24
Deny from 45.134.252.0/24
Deny from 45.135.32.0/24
Deny from 45.139.125.0/24
Deny from 45.139.176.0/24
Deny from 45.140.52.0/24
Deny from 45.142.252.0/24
Deny from 45.144.36.0/24
Deny from 45.145.116.0/24
Deny from 45.147.192.0/24
Deny from 45.151.145.0/24
Deny from 46.8.10.0/24
Deny from 46.8.14.0/24
Deny from 46.8.16.0/24
Deny from 46.8.22.0/24
Deny from 46.8.56.0/24
Deny from 46.8.106.0/24
Deny from 46.8.110.0/24
Deny from 46.8.154.0/24
Deny from 46.8.156.0/24
Deny from 46.8.192.0/24
Deny from 46.8.212.0/24
Deny from 46.8.222.0/24
Deny from 77.83.84.0/24
Deny from 77.83.148.0/24
Deny from 77.94.1.0/24
Deny from 84.54.53.0/24
Deny from 91.188.244.0/24
Deny from 92.119.193.0/24
Deny from 94.158.190.0/24
Deny from 95.182.124.0/24
Deny from 109.248.12.0/24
Deny from 109.248.48.0/24
Deny from 109.248.54.0/24
Deny from 109.248.128.0/24
Deny from 109.248.138.0/24
Deny from 109.248.142.0/24
Deny from 109.248.166.0/24
Deny from 109.248.204.0/24
Deny from 176.53.186.0/24
Deny from 185.181.244.0/24
Deny from 188.130.128.0/24
Deny from 188.130.136.0/24
Deny from 188.130.142.0/24
Deny from 188.130.184.0/24
Deny from 188.130.188.0/24
Deny from 188.130.210.0/24
Deny from 188.130.218.0/24
Deny from 188.130.220.0/24
Deny from 192.144.31.0/24
Deny from 193.53.168.0/24
Deny from 193.58.168.0/24
Deny from 194.32.229.0/24
Deny from 194.32.237.0/24
Deny from 194.34.248.0/24
Deny from 194.35.113.0/24
Deny from 194.156.92.0/24
Deny from 194.156.96.0/24
Deny from 194.156.123.0/24
Deny from 212.115.49.0/24
Deny from 213.226.101.0/24
# Block individual IP addresses listed in the file
Deny from 2.59.50.134
Deny from 2.59.50.208
Deny from 5.183.130.29
Deny from 5.183.130.113
Deny from 5.183.130.120
Deny from 5.183.130.181
Deny from 5.183.130.238
Deny from 31.40.203.75
Deny from 45.11.20.3
Deny from 45.11.20.40
Deny from 45.11.20.240
Deny from 45.11.21.164
Deny from 45.11.21.171
Deny from 45.11.21.225
Deny from 45.15.72.83
Deny from 45.15.73.126
Deny from 45.15.73.129
Deny from 45.15.73.142
Deny from 45.15.73.217
Deny from 45.81.136.51
Deny from 45.81.136.80
Deny from 45.81.136.103
Deny from 45.81.136.250
Deny from 45.81.137.172
Deny from 45.84.176.63
Deny from 45.84.176.189
Deny from 45.84.176.222
Deny from 45.86.0.72
Deny from 45.86.0.122
Deny from 45.86.1.81
Deny from 45.86.1.126
Deny from 45.86.1.180
Deny from 45.87.252.153
Deny from 45.87.252.219
Deny from 45.87.253.172
Deny from 45.89.19.5
Deny from 45.89.19.11
Deny from 45.89.19.16
Deny from 45.89.19.44
Deny from 45.89.19.49
Deny from 45.89.19.55
Deny from 45.89.19.60
Deny from 45.89.19.70
Deny from 45.89.19.87
Deny from 45.89.19.101
Deny from 45.90.196.186
Deny from 45.90.196.201
Deny from 45.90.196.232
Deny from 45.134.180.201
Deny from 45.140.52.217
Deny from 45.140.53.49
Deny from 45.140.53.105
Deny from 45.140.54.66
Deny from 45.145.118.217
Deny from 46.8.11.77
Deny from 46.8.14.194
Deny from 46.8.16.245
Deny from 46.8.17.13
Deny from 46.8.17.66
Deny from 46.8.17.82
Deny from 46.8.22.4
Deny from 46.8.22.18
Deny from 46.8.22.106
Deny from 46.8.22.206
Deny from 46.8.22.215
Deny from 46.8.23.34
Deny from 46.8.23.72
Deny from 46.8.23.130
Deny from 46.8.23.154
Deny from 46.8.23.196
Deny from 46.8.23.241
Deny from 46.8.23.244
Deny from 46.8.57.54
Deny from 46.8.57.122
Deny from 46.8.57.205
Deny from 46.8.106.4
Deny from 46.8.106.93
Deny from 46.8.106.142
Deny from 46.8.110.13
Deny from 46.8.110.75
Deny from 46.8.110.193
Deny from 46.8.110.225
Deny from 46.8.111.4
Deny from 46.8.111.142
Deny from 46.8.154.169
Deny from 46.8.155.23
Deny from 46.8.156.146
Deny from 46.8.157.15
Deny from 46.8.192.107
Deny from 46.8.192.129
Deny from 46.8.192.158
Deny from 46.8.192.208
Deny from 46.8.193.35
Deny from 46.8.193.89
Deny from 46.8.212.194
Deny from 46.8.212.218
Deny from 46.8.222.23
Deny from 46.8.222.191
Deny from 46.8.223.2
Deny from 46.8.223.44
Deny from 46.8.223.175
Deny from 46.8.223.181
Deny from 46.8.223.209
Deny from 77.83.148.21
Deny from 77.83.148.194
Deny from 77.83.149.64
Deny from 92.119.193.36
Deny from 92.119.193.99
Deny from 94.158.190.28
Deny from 94.158.190.237
Deny from 5.182.124.20
Deny from 95.182.124.71
Deny from 95.182.124.127
Deny from 95.182.124.145
Deny from 95.182.124.163
Deny from 95.182.124.171
Deny from 95.182.125.54
Deny from 95.182.125.58
Deny from 95.182.125.116
Deny from 95.182.127.15
Deny from 95.182.127.86
Deny from 95.182.127.100
Deny from 109.248.12.46
Deny from 109.248.12.74
Deny from 109.248.12.242
Deny from 109.248.12.244
Deny from 109.248.13.54
Deny from 109.248.14.55
Deny from 109.248.14.68
Deny from 109.248.14.72
Deny from 109.248.15.13
Deny from 109.248.15.93
Deny from 109.248.15.123
Deny from 109.248.48.19
Deny from 109.248.48.108
Deny from 109.248.54.84
Deny from 109.248.55.37
Deny from 109.248.55.203
Deny from 109.248.128.158
Deny from 109.248.129.56
Deny from 109.248.138.185
Deny from 109.248.138.196
Deny from 109.248.139.173
Deny from 109.248.142.122
Deny from 109.248.142.160
Deny from 109.248.142.184
Deny from 109.248.142.222
Deny from 109.248.142.235
Deny from 109.248.142.249
Deny from 109.248.143.16
Deny from 109.248.143.25
Deny from 109.248.143.97
Deny from 109.248.143.169
Deny from 109.248.143.173
Deny from 109.248.167.112
Deny from 109.248.167.249
Deny from 109.248.204.36
Deny from 109.248.204.99
Deny from 109.248.204.104
Deny from 109.248.204.169
Deny from 109.248.204.179
Deny from 109.248.205.2
Deny from 109.248.205.32
Deny from 109.248.205.40
Deny from 185.181.244.3
Deny from 185.181.244.84
Deny from 185.181.245.20
Deny from 185.181.245.109
Deny from 185.181.245.184
Deny from 185.181.246.122
Deny from 185.181.246.137
Deny from 185.181.246.198
Deny from 185.181.247.131
Deny from 188.130.128.56
Deny from 188.130.128.81
Deny from 188.130.128.179
Deny from 188.130.128.192
Deny from 188.130.129.31
Deny from 188.130.129.100
Deny from 188.130.129.234
Deny from 188.130.136.2
Deny from 188.130.136.6
Deny from 188.130.136.76
Deny from 188.130.136.152
Deny from 188.130.136.177
Deny from 188.130.136.210
Deny from 188.130.137.5
Deny from 188.130.137.43
Deny from 188.130.137.205
Deny from 188.130.137.246
Deny from 188.130.142.132
Deny from 188.130.142.186
Deny from 188.130.143.112
Deny from 188.130.143.138
Deny from 188.130.143.240
Deny from 188.130.143.253
Deny from 188.130.184.20
Deny from 188.130.184.119
Deny from 188.130.185.145
Deny from 188.130.186.132
Deny from 188.130.186.254
Deny from 188.130.188.12
Deny from 188.130.188.37
Deny from 188.130.188.211
Deny from 188.130.188.236
Deny from 188.130.189.88
Deny from 188.130.210.231
Deny from 188.130.218.19
Deny from 188.130.218.127
Deny from 188.130.218.236
Deny from 188.130.218.243
Deny from 188.130.219.53
Deny from 188.130.219.77
Deny from 188.130.219.196
Deny from 188.130.219.240
Deny from 188.130.220.17
Deny from 188.130.220.101
Deny from 188.130.220.166
Deny from 188.130.221.25
Deny from 194.34.248.39
Deny from 194.34.248.138
Deny from 194.34.248.217
Deny from 194.34.248.254
Deny from 194.35.113.90
Deny from 194.35.113.116
Deny from 194.35.113.149