Крутой .htaccess

Когда речь заходить про .htaccess, мы обычно вспоминаем перенаправление - redirect, который помогает редиректить с одного убитого урла на новый (когда статья поменяла фактический адрес) или редирект домена с www на без www. Это наиболее распространенные ситуации, которые приходится решать начинающим вебмастерам, прибегая к помощи файла .htaccess. Между тем, не все знают, что это мощный инструмент для очень большого числа ситуаций: он может ускорить ваш сайт, отбивать атаки ботов, фильтровать трафик, обмениваться трафиком между сайтами и т.д. и т.п.

.htaccess - файл, который дает возможность конфигурировать работу Вашего сервера в отдельных папках. Он с легкостью может заменить на Вашем сайте тяжелые плагины или модули, подгружаемые к сайту для решения тех или иных проблем. Достаточно прописать в нем соответствующие команды, которые вступают в силу немедленно, не требуя перезагрузки сервера.

Ниже я хочу показать вам несколько полезных и практичных команд для .htaccess, которые обязательно Вам пригодятся, если не прямо сейчас, то в обозримом будущем точно.

Блокируем ботов и пауков с помощью .htaccess

В интернете полно поисковых машин и разного рода сканеров, бесполезных для вашего сайта, но которые создают колоссальный трафик и нагрузку на ваш сайт. Особенно часто это прослеживается на дешевых тарифных планах. Вы наверное замечали такую ситуацию, что вроде бы и посещений нет на сайте, но техническая поддержка хостинга постоянно присылает письма о высокой нагрузке на вашем сайте?

Код ниже позволит запретить доступ бесполезным ботам на сайт:

RewriteCond %{HTTP_USER_AGENT} (Slurp|spider|Twiceler|heritrix|
	Combine|appie|boitho|e-SocietyRobot|Exabot|Nutch|OmniExplorer|
	MJ12bot|ZyBorg/1|Ask\ Jeeves|AskJeeves|ActiveTouristBot|
	JemmaTheTourist| agadine3|BecomeBot|Clustered-Search-Bot|
	MSIECrawler|freefind|galaxy|genieknows|INGRID|grub-client|
	MojeekBot|NaverBot|NetNose-Crawler|OnetSzukaj|PrassoSunner|
	Asterias\ Crawler|T-H-U-N-D-E-R-S-T-O-N-E|GeorgeTheTouristBot|
	VoilaBot|Vagabondo|fantomBro wser|stealthBrowser|cloakBrowser|
	fantomCrew\ Browser|Girafabot|Indy\ Library|Intelliseek|Zealbot|
	Windows\ 95|^Mozilla/4\.05\ \[en\]$|^Mozilla/4\.0$) [NC]
RewriteRule ^(.*)$ - [F]
#
RewriteCond %{HTTP_USER_AGENT} ^Mozilla.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Opera.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Firefox.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Netscape.* [NC]
RewriteRule ^(.*)$ - [L]
RewriteRule ^(.*)$ - [F]

Вот еще один вариант, который также блокирует нежелательных ботов, фильтруя и блокируя их по User Agent:

SetEnvIfNoCase User-Agent "^Black Hole" bad_bot
SetEnvIfNoCase User-Agent "^Titan" bad_bot
SetEnvIfNoCase User-Agent "^WebStripper" bad_bot
SetEnvIfNoCase User-Agent "^ExtractorPro" bad_bot
SetEnvIfNoCase User-Agent "^CopyRightCheck" bad_bot
SetEnvIfNoCase User-Agent "^Crescent" bad_bot
SetEnvIfNoCase User-Agent "^Wget" bad_bot
SetEnvIfNoCase User-Agent "^SiteSnagger" bad_bot
SetEnvIfNoCase User-Agent "^ProWebWalker" bad_bot
SetEnvIfNoCase User-Agent "^CheeseBot" bad_bot
SetEnvIfNoCase User-Agent "^Teleport" bad_bot
SetEnvIfNoCase User-Agent "^TeleportPro" bad_bot
SetEnvIfNoCase User-Agent "^NetMechanic" bad_bot
SetEnvIfNoCase User-Agent "^CherryPicker" bad_bot
SetEnvIfNoCase User-Agent "^EmailCollector" bad_bot
SetEnvIfNoCase User-Agent "^EmailSiphon" bad_bot
SetEnvIfNoCase User-Agent "^WebBandit" bad_bot
SetEnvIfNoCase User-Agent "^EmailWolf" bad_bot
SetEnvIfNoCase User-Agent "^MIIxpc" bad_bot
SetEnvIfNoCase User-Agent "^Telesoft" bad_bot
SetEnvIfNoCase User-Agent "^Website Quester" bad_bot
SetEnvIfNoCase User-Agent "^WebZip" bad_bot
SetEnvIfNoCase User-Agent "^moget/2.1" bad_bot
SetEnvIfNoCase User-Agent "^WebZip/4.0" bad_bot
SetEnvIfNoCase User-Agent "^WebSauger" bad_bot
SetEnvIfNoCase User-Agent "^WebCopier" bad_bot
SetEnvIfNoCase User-Agent "^NetAnts" bad_bot
SetEnvIfNoCase User-Agent "^Mister PiX" bad_bot
SetEnvIfNoCase User-Agent "^WebAuto" bad_bot
SetEnvIfNoCase User-Agent "^TheNomad" bad_bot
SetEnvIfNoCase User-Agent "^WWW-Collector-E" bad_bot
SetEnvIfNoCase User-Agent "^spanner" bad_bot
SetEnvIfNoCase User-Agent "^InfoNaviRobot" bad_bot
SetEnvIfNoCase User-Agent "^Harvest/1.5" bad_bot
SetEnvIfNoCase User-Agent "^Bullseye/1.0" bad_bot
SetEnvIfNoCase User-Agent "^Mozilla/4.0 (compatible; BullsEye; Windows 95)" bad_bot
SetEnvIfNoCase User-Agent "^Crescent Internet ToolPak HTTP OLE Control v.1.0" bad_bot
SetEnvIfNoCase User-Agent "^CherryPickerSE/1.0" bad_bot
SetEnvIfNoCase User-Agent "^RMA" bad_bot
SetEnvIfNoCase User-Agent "^libWeb/clsHTTP" bad_bot
SetEnvIfNoCase User-Agent "^asterias" bad_bot
SetEnvIfNoCase User-Agent "^httplib" bad_bot
SetEnvIfNoCase User-Agent "^turingos" bad_bot
SetEnvIfNoCase User-Agent "^CherryPicker /1.0" bad_bot
SetEnvIfNoCase User-Agent "^WebBandit/3.50" bad_bot
SetEnvIfNoCase User-Agent "^NICErsPRO" bad_bot
SetEnvIfNoCase User-Agent "^Microsoft URL Control - 5.01.4511" bad_bot
SetEnvIfNoCase User-Agent "^DittoSpyder" bad_bot
SetEnvIfNoCase User-Agent "^Foobot" bad_bot
SetEnvIfNoCase User-Agent "^WebmasterWorldForumBot" bad_bot
SetEnvIfNoCase User-Agent "^SpankBot" bad_bot
SetEnvIfNoCase User-Agent "^BotALot" bad_bot
SetEnvIfNoCase User-Agent "^lwp-trivial/1.34" bad_bot
SetEnvIfNoCase User-Agent "^lwp-trivial" bad_bot
SetEnvIfNoCase User-Agent "^Wget/1.6" bad_bot
SetEnvIfNoCase User-Agent "^BunnySlippers" bad_bot
SetEnvIfNoCase User-Agent "^humanlinks" bad_bot
SetEnvIfNoCase User-Agent "^LinkextractorPro" bad_bot
SetEnvIfNoCase User-Agent "^Offline Explorer" bad_bot
SetEnvIfNoCase User-Agent "^Mata Hari" bad_bot
SetEnvIfNoCase User-Agent "^LexiBot" bad_bot
SetEnvIfNoCase User-Agent "^Web Image Collector" bad_bot
SetEnvIfNoCase User-Agent "^The Intraformant" bad_bot
SetEnvIfNoCase User-Agent "^True_Robot/1.0" bad_bot
SetEnvIfNoCase User-Agent "^True_Robot" bad_bot
SetEnvIfNoCase User-Agent "^Microsoft URL Control - 6.00.8169" bad_bot
SetEnvIfNoCase User-Agent "^URLy Warning" bad_bot
SetEnvIfNoCase User-Agent "^Wget/1.5.3" bad_bot
SetEnvIfNoCase User-Agent "^LinkWalker" bad_bot
SetEnvIfNoCase User-Agent "^cosmos" bad_bot
SetEnvIfNoCase User-Agent "^moget" bad_bot
SetEnvIfNoCase User-Agent "^hloader" bad_bot
SetEnvIfNoCase User-Agent "^BlowFish/1.0" bad_bot
SetEnvIfNoCase User-Agent "^JennyBot" bad_bot
SetEnvIfNoCase User-Agent "^MIIxpc/4.2" bad_bot
SetEnvIfNoCase User-Agent "^BuiltBotTough" bad_bot
SetEnvIfNoCase User-Agent "^ProPowerBot/2.14" bad_bot
SetEnvIfNoCase User-Agent "^BackDoorBot/1.0" bad_bot
SetEnvIfNoCase User-Agent "^toCrawl/UrlDispatcher" bad_bot
SetEnvIfNoCase User-Agent "^WebEnhancer" bad_bot
SetEnvIfNoCase User-Agent "^TightTwatBot" bad_bot
SetEnvIfNoCase User-Agent "^suzuran" bad_bot
SetEnvIfNoCase User-Agent "^VCI WebViewer VCI WebViewer Win32" bad_bot
SetEnvIfNoCase User-Agent "^VCI" bad_bot
SetEnvIfNoCase User-Agent "^Xenu's Link Sleuth 1.1c" bad_bot
SetEnvIfNoCase User-Agent "^Xenu's" bad_bot
SetEnvIfNoCase User-Agent "^Zeus" bad_bot
SetEnvIfNoCase User-Agent "^RepoMonkey Bait & Tackle/v1.01" bad_bot
SetEnvIfNoCase User-Agent "^RepoMonkey" bad_bot
SetEnvIfNoCase User-Agent "^Zeus 32297 Webster Pro V2.9 Win32" bad_bot
SetEnvIfNoCase User-Agent "^Webster Pro" bad_bot
SetEnvIfNoCase User-Agent "^EroCrawler" bad_bot
SetEnvIfNoCase User-Agent "^LinkScan/8.1a Unix" bad_bot
SetEnvIfNoCase User-Agent "^Keyword Density/0.9" bad_bot
SetEnvIfNoCase User-Agent "^Szukacz/1.4" bad_bot
SetEnvIfNoCase User-Agent "^QueryN Metasearch" bad_bot
SetEnvIfNoCase User-Agent "^Openfind data gathere" bad_bot
SetEnvIfNoCase User-Agent "^Openfind" bad_bot
SetEnvIfNoCase User-Agent "^Kenjin Spider" bad_bot
SetEnvIfNoCase User-Agent "^Cegbfeieh" bad_bot

Order Allow,Deny
Allow from all
Deny from env=bad_bot

Блокируем хакеров и недоброжелателей

Если вы пристально изучите логи посещений своего сайта, то заметите, постоянные и регулярные запросы к вашему сайту странного содержания. Например, могут ломиться в админку или на не существующие, но вытекающие отсюда адреса:

/admin
/administrator
/a
/admin.php
/administrator.php
...

Во-первых, мы можем запретить доступ на сайт такому взломщику по ip (он или они будет указан в логах):

<Limit GET POST PUT>
order allow,deny
allow from all
deny from 191.132.52.165
deny from 121.346.124
</LIMIT>

При желании, мы можем редиректить взломщика на нужную нам страницу, например, hakeram.php, где можем разместить гневный текст, недовольство его деятельностью или личное предупреждение. В нижеприведенном примере, посетитель с ip адресом  191.132.52.165 будете перенаправлен на страницу hakeram.php:

SetEnvIf REMOTE_ADDR 191.132.52.165  REDIR="redir"
RewriteCond %{REDIR} redir
RewriteRule ^/$ / hakeram.php

А во-вторых, мы можем перенаправлять нежелательные запросы (обычно это проделки хакеров, сетевых вирусов и сканеров)  к нашему сайту на какой-то посторонний ресурс. В нашем примере, все странные запросы будем автоматически перенаправлять на сайт Microsoft:

redirect /admin http://www.microsoft.com
redirect /administrator http://www.microsoft.com
redirect /a http://www.microsoft.com
redirect /admin.php http://www.microsoft.com
redirect /d http://www.microsoft.com
redirect /administrator.php http://www.microsoft.com

Умный редирект с помощью .htaccess

С помощью .htaccess возможно реализовать на своем сайте "умный" редирект, перенаправлять определенных пользователей на удобные нам странички в зависимости от некоторых условий. Такие манипуляции иногда очень полезны. Например, в одно время на одном из сайтов моего клиента происходило открытое голосование и один из участников-номинантов дабы накрутить голоса, сделал ход конем: создал на одном из буксов (букс - система, в которой рекламодатели платят исполнителям чтобы прорекламироваться) задание по накрутке голосов... Пресечь накрутку удалось с помощью все того же .htaccess (см. ниже).

Мы можем редиректить определенных роботов и пользователей по user-agent:

RewriteCond %{HTTP_USER_AGENT} ^SpiderX
RewriteRule ^(.*)$ http://%{REMOTE_ADDR}/$ [r=301,l]

В этом примере, все клиенты со строкой HTTP_USER_AGENT начинающейся на SpiderX будут направлены туда, откуда и пришли (от ворот поворот).

Для редиректа посетителей, пришедших на наш сайт, с определенных сайтов, можно использовать такое правило в .htaccess:

RewriteCond %{HTTP_REFERER} www.microsoft.com [NC]
RewriteRule .* http://google.ru/

В этом примере, все пользователи, которые придут на наш сайт с  www.microsoft.com будут отфутболены на  http://google.ru/

Наконец, некоторым может пригодится условие редиректа, в зависимости от текущего времени.

RewriteEngine on
RewriteCond %{TIME_HOUR}%{TIME_MIN} >0600
RewriteCond %{TIME_HOUR}%{TIME_MIN} <1900
RewriteRule ^index.html$ /dobriy_den.php
RewriteRule ^index.html$ /dobriy_vecher.php

В этом примере, с 6.00 часов утра и до 19.00 пользователи, приходящие на страницу index.html  будут перенаправляться на URL  dobriy_den.php, а с 19:00 и до 6.00 утра, на URL dobriy_vecher.php.

Резюме. Это не все примеры реализации манипуляций трафиком с помощью .htaccess, а лишь беглая демонстрация очень больших возможностей файла .htaccess и вытекающий отсюда стимул поглубже вникнуть в синтаксис написания правил этого конфигурационного файла.

Оцените материал:
Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (16 голоса, рейтинг: 4,50 из 5)
Загрузка...

Вячеслав - типичный интернетчикВячеслав Скоблей (ака files) - типичный интернетчик. Скитаюсь интернетом, пишу на PHP, увлекаюсь созданием веб-сайтов на Wordpress, решаю многочисленные проблемы, которые до появления интернета не существовали...

Специализируюсь на безопасности сайтов: защищаю сайты от атак и взломов, занимаюсь лечением вирусов на сайтах и профилактикой...

Наверняка у Вас есть вопросы, просьбы или пожелания. Не стесняйтесь спросить, я отвечаю всегда быстро...

11 комментарий

  1. Alex says:

    Возникла проблема с определением IP пользователей. Из-за постоянных попыток положить сайт, подлкючена анти-ддос защита. Трафик на сайт поступает через прокси. Часть плагинов верно определяет IP посетителей. Но при попытке забанить или переадреосвать какой-либо IP-адрес через htaccess ничего не работает, так как определяется IP-адрес прокси анти-ддоса. Можно что-то прописать в htaccess, чтобы он определял реальный IP юзера?

  2. Анатолий says:

    Добрый день, подскажите пожалуйста можно ли использовать какойто из этих кодов для отлова ботов в тизерных сетях?
    P.S Заранее спасибо за ответ!

  3. Александр says:

    А как можно заблокировать доступ к сайту со всех стран кроме России и Украины, но разрешить Гугл боту посещать?
    Что то типа такого как настроить?

    RewriteEngine on
    SetEnvIf GEOIP_COUNTRY_CODE RU AllowCountry
    SetEnvIf GEOIP_COUNTRY_CODE NL AllowCountry
    Deny from all
    Allow from env=AllowCountry
    RewriteCond %{ENV:GEOIP_COUNTRY_CODE} !^(RU|BY|UA|KZ|NL|US)$
    RewriteCond %{HTTP_USER_AGENT} !bingbot [NC]
    RewriteCond %{HTTP_USER_AGENT} !Googlebot [NC]
    RewriteCond %{HTTP_USER_AGENT} !Slurp [NC]
    RewriteCond %{HTTP_USER_AGENT} !AppleWebKit [NC]
    RewriteCond %{HTTP_USER_AGENT} !Google-Site-Verification [NC]
    RewriteRule ^.*$ - [F,L]

    Спасибо.

  4. Валерий says:

    День добрый.
    Уже второй день не могу справиться с простым редиректом по IP с любой страницы сайта на одну определенную.. Немного удивлен, что вы (и никто другой в интернете) не отмечали, что запись:

    SetEnvIf REMOTE_ADDR 191.132.52.165 REDIR="redir"
    RewriteCond %{REDIR} redir
    RewriteRule ^/$ / hakeram.php

    Создает бесконечный редирект на страницу /hakeram.php . Это и есть проблема, может вы подскажите, как от нее избавиться?

    Забавный случай: если использовать вашу запись "как есть", то редирект происходит, но на странице происходит "зацикленность" и браузер, естественно, ее не открывает. НО, если удалить, допустим слеш в третьей строке, то правила не выполняются и, браузер, первое время, пока не обновится кеш, продолжает редиректить на страницу, но уже без ошибки ))) Т.е. цикла нет, а редирект еще "в памяти". Естественно, все лечится входом без кукисов.

    1. Вячеслав Скоблей says:

      Валерий, первым делом, правило требует mod_rewrite. Обратитесь к администратору хостинга и уточните, задействован ли модуль сервера Apache

      1. Валерий says:

        Вячеслав, модуль, конечно же присутствует - правила для ссылок работают прекрасно. Да и само перенаправление же происходит, вот только зацикливается. Сегодня ответил хостер, выдвинул одну правку в строке, но и она не сработала :))
        У меня сайт на ModX Revolution, уже думал, что что-то из родных правил в .htaccess мешает, все закомментировал (кроме обязательных строк) - эффекта ноль :)

        1. Вячеслав Скоблей says:

          Получается, приведенный пример морально устарел (зависит от версии Apache). Повторить его на своем сайте мне также не удалось.

          1. Валерий says:

            Понятно. Да, удивительное дело.
            В итоге решил не мучиться с редиректом на страницу того же сайта(позже обязательно разберусь). Сделал редирект для IP на другой домен. Благо есть пустые, где можно обратиться к наглому "мастеру" ))).
            Спасибо за комментарии, хоть понял, что не я туплю.

  5. says:

    Еще некий AhrefsBot поймал у себя
    51.255.65.95 - - [08/Feb/2016:00:02:29 +0300] "GET ***HTTP/1.0" 200 37301 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)"

  6. Владимир says:

    А откуда такой список ботов, если не секрет?:)
    И вообще, может легче разрешить некоторым и запретить всем остальным? Скажем Google, Yandex, Chrome, Mozila итд, а всем остальным тыц?! Попробовал найти панику в интернете по этому поводу и как-то тихо, может не то ищу.

    1. Вячеслав Скоблей says:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Читайте ранее:
Еще раз об НЧ, СЧ и ВЧ
И еще раз об НЧ, СЧ и ВЧ

Практически повсеместно в Интернете на сайтах сео-направленности встречаются аббревиатуры: НЧ – СЧ – ВЧ. Что это такое и насколько это...

Закрыть