Определение мобильных браузеров с помощью .htaccess
Недавно я разбирался с одним инфицированным сайтом. При заходе на него обычным браузером все было нормально, но при заходе с мобильных устройств, смартфонов и планшетников, пользователя автоматически перебрасывало на говносайт с троянами. Трояны у меня никаких эмоций не вызывают, а вот определение мобильных устройств было сделано очень интересно - через инфицированный файл .htaccess в корневом каталоге сайта. Я уже приводил пример определения мобильных браузеров на PHP, давайте посмотрим, как определение мобильных браузеров сделано в этом случае. В конец файла .htaccess был дописан следующий блок:Code: Убрать нумерацию
- <ifModule mod_rewrite.c>
- RewriteEngine on
- # Проверить строку UserAgent браузера
- RewriteCond %{HTTP_USER_AGENT} acs [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} alav [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} alca [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} amoi [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} audi [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} aste [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} avan [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} benq [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} bird [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} blac [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} blaz [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} brew [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} cell [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} cldc [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} cmd- [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} dang [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} doco [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} eric [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} hipt [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} inno [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} ipaq [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} java [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} jigs [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} kddi [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} keji [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} leno [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} lg-c [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} lg-d [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} lg-g [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} lge- [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} maui [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} maxo [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} midp [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} mits [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} mmef [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} mobi [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} mot- [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} moto [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} mwbp [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} nec- [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} newt [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} noki [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} opwv [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} palm [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} pana [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} pant [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} pdxg [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} phil [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} play [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} pluc [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} port [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} prox [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} qtek [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} qwap [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} sage [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} sams [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} sany [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} sch- [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} sec- [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} send [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} seri [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} sgh- [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} shar [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} sie- [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} siem [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} smal [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} smar [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} sony [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} sph- [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} symb [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} t-mo [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} teli [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} tim- [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} tosh [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} tsm- [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} upg1 [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} upsi [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} vk-v [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} voda [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} w3cs [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} wap- [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} wapa [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} wapi [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} wapp [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} wapr [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} webc [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} winw [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} winw [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} xda [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} xda- [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} up.browser [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} up.link [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} windows.ce [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} iemobile [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} mini [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} mmp [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} symbian [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} midp [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} wap [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} phone [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} ipad [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} iphone [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} iPad [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} iPhone [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} ipod [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} iPod [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} pocket [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} mobile [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} android [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} Android [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} pda [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} PPC [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} Series60 [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} Opera.Mini [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} Moby [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} Mobi [NC,OR]
- # Проверить служебные заголовки, отсылаемые браузером
- RewriteCond %{HTTP_ACCEPT} "text/vnd.wap.wml" [NC,OR]
- RewriteCond %{HTTP_ACCEPT} "application/vnd.wap.xhtml+xml" [NC,OR]
- # Проверить исключения
- RewriteCond %{HTTP_USER_AGENT} !windows.nt [NC]
- RewriteCond %{HTTP_USER_AGENT} !bsd [NC]
- RewriteCond %{HTTP_USER_AGENT} !x11 [NC]
- RewriteCond %{HTTP_USER_AGENT} !unix [NC]
- RewriteCond %{HTTP_USER_AGENT} !macos [NC]
- RewriteCond %{HTTP_USER_AGENT} !macintosh [NC]
- RewriteCond %{HTTP_USER_AGENT} !playstation [NC]
- RewriteCond %{HTTP_USER_AGENT} !google [NC]
- RewriteCond %{HTTP_USER_AGENT} !yandex [NC]
- RewriteCond %{HTTP_USER_AGENT} !bot [NC]
- RewriteCond %{HTTP_USER_AGENT} !libwww [NC]
- RewriteCond %{HTTP_USER_AGENT} !msn [NC]
- RewriteCond %{HTTP_USER_AGENT} !america [NC]
- RewriteCond %{HTTP_USER_AGENT} !avant [NC]
- RewriteCond %{HTTP_USER_AGENT} !download [NC]
- RewriteCond %{HTTP_USER_AGENT} !fdm [NC]
- RewriteCond %{HTTP_USER_AGENT} !maui [NC]
- RewriteCond %{HTTP_USER_AGENT} !webmoney [NC]
- RewriteCond %{HTTP_USER_AGENT} !windows-media-player [NC]
- # При выполнении условий переадресация на мобильную версию сайта
- RewriteRule ^(.*)$ http://mobile.version.of.site.ru [L,R=302]
- </ifModule>
Нельзя однозначно сказать, что этот способ плох или хорош. У него есть как положительные стороны, так и явные недостатки. К плюсам можно отнести очень хороший процент правильного определения мобильных устройств, при этом вам не надо ничего менять в скриптах. А в случае появления новых мобильных устройств в список просто добавляются новые сигнатуры. Также этот метод будет прекрасно работать даже на статичных сайтах, вообще без какого-либо программирования. Минусы такого метода определения в том, что для мобильной версии придется создавать отдельный домен или субдомен. В принципе, это даже правильно, но так или иначе требует настроек на сервере. Еще к минусам можно отнести то, что ни вы, ни пользователь не сможете выбрать что открыть - полную или мобильную версию сайта. Например, у меня на этом сайте мобильные устройства определяются средствами PHP, но с мобильной версии сайта всегда можно переключиться на полную, и ей можно пользоваться даже с мобильного устройства. При работе через .htaccess пользователь без вариантов всегда будет переадресовываться на мобильную версию. Так что как всегда, выбор инструментария определяется поставленной задачей.
Просмотров: 11145 | Комментариев: 10
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Дмитри
(22.06.2015 в 16:15):
Спасибо большое за метод, всё отлично работает
Эдуард
(19.02.2015 в 01:42):
Как же долго я искал нормальный код, чтобы просто взять и вставить к себе на сайт. Нашел! Спасибо огромное!
ManHunter
(29.01.2014 в 12:21):
(Суб)домен для мобильников должен быть самостоятельным
Виталий
(29.01.2014 в 12:19):
а у меня пишет ошибку ошибка страница содержит слишком много перенаправлений с сервера
Andrey
(25.10.2013 в 14:57):
Спасибо, очень полезная статья.
Вот только для мобильной версии не нужно делать отдельный домен.
Достаточно в папку с мобильной версией, находящуюся на том же домене положить .htaccess файл следующего содержания:
RewriteEngine off
Allow from all
И все работает.
Вот только для мобильной версии не нужно делать отдельный домен.
Достаточно в папку с мобильной версией, находящуюся на том же домене положить .htaccess файл следующего содержания:
RewriteEngine off
Allow from all
И все работает.
Jam
(05.12.2012 в 21:34):
Спасибо за статью! Все заработало!
Если интересно, ваш метод реализовал на своей визитке: [del]
Т.к. мобильную версию моя визитка вообще не поддерживает (каша выходит), для меня ваш метод получился идеальным!
Если интересно, ваш метод реализовал на своей визитке: [del]
Т.к. мобильную версию моя визитка вообще не поддерживает (каша выходит), для меня ваш метод получился идеальным!
ManHunter
(23.09.2012 в 10:50):
Да, они обрабатываются при каждом запросе. А вот насколько будут грузить - не знаю, для этого нужен выделенный сервер с возможность его нагрузки и мониторинга в реальном времени. У меня такого нет.
Семен
(22.09.2012 в 03:22):
Насколько эти правила редиректа нагрузят апач? Правила htaccess обрабатываются при каждом (даже повторном) запросе к каждой странице?
ManHunter
(09.09.2012 в 20:50):
Сайт, который достался мне, был не на джумле. Там, похоже, просто угнали или подобрали пароль от ftp.
RADIUS
(09.09.2012 в 20:17):
Таким заражены сейчас многие сайты на Joomla, а заражает их ботнет который проверяет нет ли на сайте уязвимых компонентов и брутит админку, если удается то инфицирует сайт или все сайты которые находятся на аккаунте, если позволяет криво настроенный сервак подыматься выше своей директории.
Добавить комментарий
Заполните форму для добавления комментария