Blog. Just Blog

Определение мобильных браузеров с помощью .htaccess

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Web-мастеру и не только | Автор: ManHunter
Недавно я разбирался с одним инфицированным сайтом. При заходе на него обычным браузером все было нормально, но при заходе с мобильных устройств, смартфонов и планшетников, пользователя автоматически перебрасывало на говносайт с троянами. Трояны у меня никаких эмоций не вызывают, а вот определение мобильных устройств было сделано очень интересно - через инфицированный файл .htaccess в корневом каталоге сайта. Я уже приводил пример определения мобильных браузеров на PHP, давайте посмотрим, как определение мобильных браузеров сделано в этом случае. В конец файла .htaccess был дописан следующий блок:
  1. <ifModule mod_rewrite.c>
  2. RewriteEngine on
  3. # Проверить строку UserAgent браузера
  4. RewriteCond %{HTTP_USER_AGENTacs [NC,OR]
  5. RewriteCond %{HTTP_USER_AGENTalav [NC,OR]
  6. RewriteCond %{HTTP_USER_AGENTalca [NC,OR]
  7. RewriteCond %{HTTP_USER_AGENTamoi [NC,OR]
  8. RewriteCond %{HTTP_USER_AGENTaudi [NC,OR]
  9. RewriteCond %{HTTP_USER_AGENTaste [NC,OR]
  10. RewriteCond %{HTTP_USER_AGENTavan [NC,OR]
  11. RewriteCond %{HTTP_USER_AGENTbenq [NC,OR]
  12. RewriteCond %{HTTP_USER_AGENTbird [NC,OR]
  13. RewriteCond %{HTTP_USER_AGENTblac [NC,OR]
  14. RewriteCond %{HTTP_USER_AGENTblaz [NC,OR]
  15. RewriteCond %{HTTP_USER_AGENTbrew [NC,OR]
  16. RewriteCond %{HTTP_USER_AGENTcell [NC,OR]
  17. RewriteCond %{HTTP_USER_AGENTcldc [NC,OR]
  18. RewriteCond %{HTTP_USER_AGENTcmd- [NC,OR]
  19. RewriteCond %{HTTP_USER_AGENTdang [NC,OR]
  20. RewriteCond %{HTTP_USER_AGENTdoco [NC,OR]
  21. RewriteCond %{HTTP_USER_AGENTeric [NC,OR]
  22. RewriteCond %{HTTP_USER_AGENThipt [NC,OR]
  23. RewriteCond %{HTTP_USER_AGENTinno [NC,OR]
  24. RewriteCond %{HTTP_USER_AGENTipaq [NC,OR]
  25. RewriteCond %{HTTP_USER_AGENTjava [NC,OR]
  26. RewriteCond %{HTTP_USER_AGENTjigs [NC,OR]
  27. RewriteCond %{HTTP_USER_AGENTkddi [NC,OR]
  28. RewriteCond %{HTTP_USER_AGENTkeji [NC,OR]
  29. RewriteCond %{HTTP_USER_AGENTleno [NC,OR]
  30. RewriteCond %{HTTP_USER_AGENTlg-[NC,OR]
  31. RewriteCond %{HTTP_USER_AGENTlg-[NC,OR]
  32. RewriteCond %{HTTP_USER_AGENTlg-[NC,OR]
  33. RewriteCond %{HTTP_USER_AGENTlge- [NC,OR]
  34. RewriteCond %{HTTP_USER_AGENTmaui [NC,OR]
  35. RewriteCond %{HTTP_USER_AGENTmaxo [NC,OR]
  36. RewriteCond %{HTTP_USER_AGENTmidp [NC,OR]
  37. RewriteCond %{HTTP_USER_AGENTmits [NC,OR]
  38. RewriteCond %{HTTP_USER_AGENTmmef [NC,OR]
  39. RewriteCond %{HTTP_USER_AGENTmobi [NC,OR]
  40. RewriteCond %{HTTP_USER_AGENTmot- [NC,OR]
  41. RewriteCond %{HTTP_USER_AGENTmoto [NC,OR]
  42. RewriteCond %{HTTP_USER_AGENTmwbp [NC,OR]
  43. RewriteCond %{HTTP_USER_AGENTnec- [NC,OR]
  44. RewriteCond %{HTTP_USER_AGENTnewt [NC,OR]
  45. RewriteCond %{HTTP_USER_AGENTnoki [NC,OR]
  46. RewriteCond %{HTTP_USER_AGENTopwv [NC,OR]
  47. RewriteCond %{HTTP_USER_AGENTpalm [NC,OR]
  48. RewriteCond %{HTTP_USER_AGENTpana [NC,OR]
  49. RewriteCond %{HTTP_USER_AGENTpant [NC,OR]
  50. RewriteCond %{HTTP_USER_AGENTpdxg [NC,OR]
  51. RewriteCond %{HTTP_USER_AGENTphil [NC,OR]
  52. RewriteCond %{HTTP_USER_AGENTplay [NC,OR]
  53. RewriteCond %{HTTP_USER_AGENTpluc [NC,OR]
  54. RewriteCond %{HTTP_USER_AGENTport [NC,OR]
  55. RewriteCond %{HTTP_USER_AGENTprox [NC,OR]
  56. RewriteCond %{HTTP_USER_AGENTqtek [NC,OR]
  57. RewriteCond %{HTTP_USER_AGENTqwap [NC,OR]
  58. RewriteCond %{HTTP_USER_AGENTsage [NC,OR]
  59. RewriteCond %{HTTP_USER_AGENTsams [NC,OR]
  60. RewriteCond %{HTTP_USER_AGENTsany [NC,OR]
  61. RewriteCond %{HTTP_USER_AGENTsch- [NC,OR]
  62. RewriteCond %{HTTP_USER_AGENTsec- [NC,OR]
  63. RewriteCond %{HTTP_USER_AGENTsend [NC,OR]
  64. RewriteCond %{HTTP_USER_AGENTseri [NC,OR]
  65. RewriteCond %{HTTP_USER_AGENTsgh- [NC,OR]
  66. RewriteCond %{HTTP_USER_AGENTshar [NC,OR]
  67. RewriteCond %{HTTP_USER_AGENTsie- [NC,OR]
  68. RewriteCond %{HTTP_USER_AGENTsiem [NC,OR]
  69. RewriteCond %{HTTP_USER_AGENTsmal [NC,OR]
  70. RewriteCond %{HTTP_USER_AGENTsmar [NC,OR]
  71. RewriteCond %{HTTP_USER_AGENTsony [NC,OR]
  72. RewriteCond %{HTTP_USER_AGENTsph- [NC,OR]
  73. RewriteCond %{HTTP_USER_AGENTsymb [NC,OR]
  74. RewriteCond %{HTTP_USER_AGENTt-mo [NC,OR]
  75. RewriteCond %{HTTP_USER_AGENTteli [NC,OR]
  76. RewriteCond %{HTTP_USER_AGENTtim- [NC,OR]
  77. RewriteCond %{HTTP_USER_AGENTtosh [NC,OR]
  78. RewriteCond %{HTTP_USER_AGENTtsm- [NC,OR]
  79. RewriteCond %{HTTP_USER_AGENTupg1 [NC,OR]
  80. RewriteCond %{HTTP_USER_AGENTupsi [NC,OR]
  81. RewriteCond %{HTTP_USER_AGENTvk-[NC,OR]
  82. RewriteCond %{HTTP_USER_AGENTvoda [NC,OR]
  83. RewriteCond %{HTTP_USER_AGENTw3cs [NC,OR]
  84. RewriteCond %{HTTP_USER_AGENTwap- [NC,OR]
  85. RewriteCond %{HTTP_USER_AGENTwapa [NC,OR]
  86. RewriteCond %{HTTP_USER_AGENTwapi [NC,OR]
  87. RewriteCond %{HTTP_USER_AGENTwapp [NC,OR]
  88. RewriteCond %{HTTP_USER_AGENTwapr [NC,OR]
  89. RewriteCond %{HTTP_USER_AGENTwebc [NC,OR]
  90. RewriteCond %{HTTP_USER_AGENTwinw [NC,OR]
  91. RewriteCond %{HTTP_USER_AGENTwinw [NC,OR]
  92. RewriteCond %{HTTP_USER_AGENTxda [NC,OR]
  93. RewriteCond %{HTTP_USER_AGENTxda- [NC,OR]
  94. RewriteCond %{HTTP_USER_AGENTup.browser [NC,OR]
  95. RewriteCond %{HTTP_USER_AGENTup.link [NC,OR]
  96. RewriteCond %{HTTP_USER_AGENTwindows.ce [NC,OR]
  97. RewriteCond %{HTTP_USER_AGENTiemobile [NC,OR]
  98. RewriteCond %{HTTP_USER_AGENTmini [NC,OR]
  99. RewriteCond %{HTTP_USER_AGENTmmp [NC,OR]
  100. RewriteCond %{HTTP_USER_AGENTsymbian [NC,OR]
  101. RewriteCond %{HTTP_USER_AGENTmidp [NC,OR]
  102. RewriteCond %{HTTP_USER_AGENTwap [NC,OR]
  103. RewriteCond %{HTTP_USER_AGENTphone [NC,OR]
  104. RewriteCond %{HTTP_USER_AGENTipad [NC,OR]
  105. RewriteCond %{HTTP_USER_AGENTiphone [NC,OR]
  106. RewriteCond %{HTTP_USER_AGENTiPad [NC,OR]
  107. RewriteCond %{HTTP_USER_AGENTiPhone [NC,OR]
  108. RewriteCond %{HTTP_USER_AGENTipod [NC,OR]
  109. RewriteCond %{HTTP_USER_AGENTiPod [NC,OR]
  110. RewriteCond %{HTTP_USER_AGENTpocket [NC,OR]
  111. RewriteCond %{HTTP_USER_AGENTmobile [NC,OR]
  112. RewriteCond %{HTTP_USER_AGENTandroid [NC,OR]
  113. RewriteCond %{HTTP_USER_AGENTAndroid [NC,OR]
  114. RewriteCond %{HTTP_USER_AGENTpda [NC,OR]
  115. RewriteCond %{HTTP_USER_AGENTPPC [NC,OR]
  116. RewriteCond %{HTTP_USER_AGENTSeries60 [NC,OR]
  117. RewriteCond %{HTTP_USER_AGENTOpera.Mini [NC,OR]
  118. RewriteCond %{HTTP_USER_AGENTMoby [NC,OR]
  119. RewriteCond %{HTTP_USER_AGENTMobi [NC,OR]
  120.  
  121. # Проверить служебные заголовки, отсылаемые браузером
  122. RewriteCond %{HTTP_ACCEPT"text/vnd.wap.wml" [NC,OR]
  123. RewriteCond %{HTTP_ACCEPT"application/vnd.wap.xhtml+xml" [NC,OR]
  124.  
  125. # Проверить исключения
  126. RewriteCond %{HTTP_USER_AGENT} !windows.nt [NC]
  127. RewriteCond %{HTTP_USER_AGENT} !bsd [NC]
  128. RewriteCond %{HTTP_USER_AGENT} !x11 [NC]
  129. RewriteCond %{HTTP_USER_AGENT} !unix [NC]
  130. RewriteCond %{HTTP_USER_AGENT} !macos [NC]
  131. RewriteCond %{HTTP_USER_AGENT} !macintosh [NC]
  132. RewriteCond %{HTTP_USER_AGENT} !playstation [NC]
  133. RewriteCond %{HTTP_USER_AGENT} !google [NC]
  134. RewriteCond %{HTTP_USER_AGENT} !yandex [NC]
  135. RewriteCond %{HTTP_USER_AGENT} !bot [NC]
  136. RewriteCond %{HTTP_USER_AGENT} !libwww [NC]
  137. RewriteCond %{HTTP_USER_AGENT} !msn [NC]
  138. RewriteCond %{HTTP_USER_AGENT} !america [NC]
  139. RewriteCond %{HTTP_USER_AGENT} !avant [NC]
  140. RewriteCond %{HTTP_USER_AGENT} !download [NC]
  141. RewriteCond %{HTTP_USER_AGENT} !fdm [NC]
  142. RewriteCond %{HTTP_USER_AGENT} !maui [NC]
  143. RewriteCond %{HTTP_USER_AGENT} !webmoney [NC]
  144. RewriteCond %{HTTP_USER_AGENT} !windows-media-player [NC]
  145.  
  146. # При выполнении условий переадресация на мобильную версию сайта
  147. RewriteRule ^(.*)$ http://mobile.version.of.site.ru [L,R=302]
  148. </ifModule>
Как это все работает? На сервере обязательно должен быть включен модуль mod_rewrite, без него ничего не получится. Так что для надежности весь этот блок обернут в проверку наличия mod_rewrite у сервера Apache (в оригинальном коде этого не было). Дальше в модуле анализируется строка UserAgent браузера посетителя, в ней последовательно проверяется наличие подстроки, характерной для браузеров мобильных устройств. После этого проверяются специфические служебные заголовки, обычно отправляемые мобильными браузерами. Если хоть одно из этих условий выполнено, то следом выполняется дополнительная проверка на различные поисковые боты, а также некоторые другие сигнатуры, присущие стационарным браузерам или автоматическим модулям. Если и эта проверка пройдена удачно, то последней строчкой посетитель перенаправляется на мобильную версию сайта.

Нельзя однозначно сказать, что этот способ плох или хорош. У него есть как положительные стороны, так и явные недостатки. К плюсам можно отнести очень хороший процент правильного определения мобильных устройств, при этом вам не надо ничего менять в скриптах. А в случае появления новых мобильных устройств в список просто добавляются новые сигнатуры. Также этот метод будет прекрасно работать даже на статичных сайтах, вообще без какого-либо программирования. Минусы такого метода определения в том, что для мобильной версии придется создавать отдельный домен или субдомен. В принципе, это даже правильно, но так или иначе требует настроек на сервере. Еще к минусам можно отнести то, что ни вы, ни пользователь не сможете выбрать что открыть - полную или мобильную версию сайта. Например, у меня на этом сайте мобильные устройства определяются средствами PHP, но с мобильной версии сайта всегда можно переключиться на полную, и ей можно пользоваться даже с мобильного устройства. При работе через .htaccess пользователь без вариантов всегда будет переадресовываться на мобильную версию. Так что как всегда, выбор инструментария определяется поставленной задачей.

Поделиться ссылкой ВКонтакте
Просмотров: 11004 | Комментариев: 10

Метки: SEO, браузеры
Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
Дмитри (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

И все работает.
Jam (05.12.2012 в 21:34):
Спасибо за статью! Все заработало!
Если интересно, ваш метод реализовал на своей визитке: [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, а заражает их ботнет который проверяет нет ли на сайте уязвимых компонентов и брутит админку, если удается то инфицирует сайт или все сайты которые находятся на аккаунте, если позволяет криво настроенный сервак подыматься выше своей директории.

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

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.08 сек. / MySQL: 2 (0.0082 сек.) / Память: 4.5 Mb
Наверх