Перенаправить мобильные устройства на альтернативную версию моего сайта

У нас есть альтернативная версия нашего сайта, готовая для мобильных устройств. Контент, который мы обслуживаем, отличается, и он хорошо работает.

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

Мы думали об использовании ширины экрана устройства - но что будет, если мобильное устройство не поддерживает javascript. Как мы это понюхаем?


person 32423hjh32423    schedule 13.07.2009    source источник


Ответы (10)


Вы можете использовать базу данных описаний устройств (например, WURFL), которая распознает клиентское устройство по заголовкам запроса. Затем вы можете запросить эту базу данных, чтобы решить, может ли устройство обрабатывать ваш сайт (например, поддерживать javascript или достаточно ли большой экран), прежде чем решить, перенаправлять ли их на другой сайт.

Вы не упоминаете свою среду, но WURFL предоставляет API для Java и PHP, а также, возможно, для других. Если прилагаемого API нет, вы все равно можете использовать WURFL, но вам придется анализировать и обрабатывать XML-данные самостоятельно.

person skaffman    schedule 13.07.2009
comment
Не знал, что существуют такие вещи. Намного лучше, чем мое решение - person Clement Herreman; 13.07.2009

media = "handheld" не работает с современными смартфонами, такими как iphone, которые претендуют на роль обозревателя настольного компьютера (использует тип мультимедиа screen).

http://detectmobilebrowser.com/ Бесплатная версия с открытым исходным кодом, имеет комплексную программу проверки мобильных пользовательских агентов, доступную на многих языках - javascript, php, asp.net, ruby ​​и т. д.

person JohnB    schedule 28.10.2010
comment
Разве это не плохо для SEO, поскольку сначала перенаправляет на detectmobilebrowser.com? - person Vijeet Deliwala; 21.08.2014
comment
На самом деле вы должны изменить эту часть кода так, чтобы она читалась вместо firecoding.com ;-) - person JoshuaDavid; 07.05.2015
comment
@FireCoding - самый хитрый комментарий, который я когда-либо видел :) - person Daniel C; 20.05.2016

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

<script type='text/javascript' src="//wurfl.io/wurfl.js"></script>

у вас останется объект JSON, который выглядит так:

{
     "complete_device_name":"Apple iPhone 6",
     "is_mobile":true,
     "form_factor":"Smartphone"
}

Затем вы можете использовать это:

if (WURFL.is_mobile === true) {
    window.location.replace("http://stackoverflow.com");
}
person Elliot Fehr    schedule 18.04.2014

Я не думаю, что есть хороший / элегантный способ определить, активирован ли у пользователя его javascript.

ИМО, лучше всего указать пользовательский агент: здесь - это список User-Agent, который кажется довольно полным (к сожалению, по-французски).

person Clement Herreman    schedule 13.07.2009

Просто поместите это в свой заголовок:

<script type="text/javascript">
 <!--
  if (screen.width <= 700) {
  window.location = "http://www.mobile-site.com";
  }
 //-->
</script>

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

person Walker    schedule 16.01.2013
comment
Обычный ipad имеет разрешение 1024x768, ipad retina в два раза больше. Так что я бы не стал полагаться на это. - person anyeone; 14.02.2014
comment
И по состоянию на 2015 год этот ответ устарел. - person Martijn; 02.12.2015

Альтернативой WURFL является Mobile Detect, класс PHP для обнаружения:

  • Планшет
  • Мобильный
  • iOs
  • Android
  • Браузеры
  • И многое другое

Так что, если WURFL не выполняет то, что вам нужно, вы всегда можете это проверить.

person Sander Koedood    schedule 15.04.2014

По согласованию со Скаффманом, другая база данных устройств - это DeviceAtlas. Однако за это придется заплатить.

person darasd    schedule 13.07.2009

Если устройство не поддерживает JS, лучше рассмотреть решение на стороне сервера, и WURFL API может помочь в этом направлении.

Иногда мы хотим избежать проблем с таким подходом (например, обратный прокси кеширует страницы и не позволяет перенаправлять на мобильную версию) или нам нужно быстрое решение, зная, что в настоящее время почти все последние устройства поддерживают JS.

По этой причине я написал сценарий JS под названием «redirection_mobile.js», который обнаруживает пользовательского агента браузера и перенаправляет на мобильную версию вашего сайта, если вы обращаетесь к нему с мобильного устройства.

В некоторых случаях вы хотите перенаправить с мобильного устройства на настольную версию (например, со ссылкой «Перейти на основной сайт»), сценарий обработает это, и после завершения сеанса вы снова получите доступ к мобильной версии. .

Вы можете найти исходный код на github здесь http://github.com/sebarmeli/JS-Redirection-Mobile-Site, и вы можете прочитать более подробную информацию в одной из моих статей здесь:

http://blog.sebarmeli.com/2010/11/02/how-to-redirect-your-site-to-a-mobile-version-through-javascript/

person sebarmeli    schedule 21.11.2010

Простой:

<link rel="alternate" media="handheld" href="WEBSITE HERE">

поместите это в раздел заголовка.

person yesminusno    schedule 09.10.2009
comment
-1 iPhone / iPod Touch и другие смартфоны не поддерживают handheld тип носителя. Они хотят отображать обычную версию сайта: это означает, что вам нужен какой-то другой механизм для обнаружения мобильного браузера. - person Ian Boyd; 12.03.2011
comment
Это не метод обнаружения, это способ семантически сообщить браузеру, где найти мобильный сайт. - person JKirchartz; 20.09.2011
comment
Но, конечно, было бы неплохо, ИМО, если бы мобильные браузеры стандартизировали соблюдение такой разметки, скажем, отображая диалоговое окно, спрашивающее, хочет ли пользователь мобильную версию сайта, и предлагая запомнить этот выбор. - person dbreaux; 27.04.2012

вот рабочее решение

RewriteEngine On
RewriteBase /

#http://stackoverflow.com/questions/3680463/mobile-redirect-using-htaccess
# Check if mobile=1 is set and set cookie 'mobile' equal to 1
RewriteCond %{QUERY_STRING} (^|&)mobile=1(&|$)
RewriteRule ^ - [CO=mobile:1:%{HTTP_HOST}]

# Check if mobile=0 is set and set cookie 'mobile' equal to 0
RewriteCond %{QUERY_STRING} (^|&)mobile=0(&|$)
RewriteRule ^ - [CO=mobile:0:%{HTTP_HOST}]

# cookie can't be set and read in the same request so check
RewriteCond %{QUERY_STRING} (^|&)mobile=0(&|$)
RewriteRule ^ - [S=1]

# Check if this looks like a mobile device
RewriteCond %{HTTP:x-wap-profile} !^$ [OR]
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC,OR]
RewriteCond %{HTTP:Profile}       !^$
RewriteCond %{QUERY_STRING} !^mobile=0(?:&|$)
# Check if we're not already on the mobile site
RewriteCond %{HTTP_HOST}          !^m\.
# Check to make sure we haven't set the cookie before
RewriteCond %{HTTP:Cookie}        !\mobile=0(;|$)
# Now redirect to the mobile site
RewriteRule ^ http://m.yourdomain.com%{REQUEST_URI} [R,L]

# Go back to full site
RewriteCond %{HTTP_HOST} ^m\.
RewriteCond %{QUERY_STRING} (?:^|&)mobile=0(?:&|$)
RewriteRule ^ http://yourdomain.com%{REQUEST_URI} [R,L]

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [NC,L]

RewriteRule ^.*$ index.php [NC,L]
person Akash Chaudhary    schedule 04.06.2019