Окончательный мобильный .htaccess редирект - PullRequest
6 голосов
/ 24 ноября 2011

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

Настройка каталога:

  • настольный сайт: website.com
  • мобильный сайт: m.website.com

Ссылки с поддержкой cookie:

  • переходя с сайта для настольных компьютеров на сайт для мобильных устройств, установите cookie для сохранения на мобильном телефоне: http://m.website.com? M = 1
  • переходя с сайта для мобильных устройств на сайт для настольных компьютеров, установите cookie для сохранения на рабочем столе: http://www.website.com? M= 0

Текущий файл .htaccess:

RewriteEngine on

# Check if this is the desktop to mobile query string
RewriteCond %{QUERY_STRING} (^|&)m=1(&|$)

# Set a cookie, and skip the next 2 rules 
RewriteRule ^ - [CO=mredir:1:%{HTTP_HOST},S=2]

# Check if this is the mobile to desktop query string
RewriteCond %{QUERY_STRING} (^|&)m=0(&|$)

# Set a cookie, and skip the next rule
RewriteRule ^ - [CO=mredir:0:%{HTTP_HOST},S]

RewriteCond %{HTTP_USER_AGENT} "android|blackberry|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC]

# Check if we're not already on the mobile site
RewriteCond %{HTTP_HOST} !^m\.

# Can not read and write cookie in same request, must duplicate condition
RewriteCond %{QUERY_STRING} !(^|&)m=0(&|$) 

# Check to make sure we haven't set the cookie before
RewriteCond %{HTTP_COOKIE} !^.*mredir=0.*$ [NC]

RewriteRule ^(.*)$ http://m.website.com/ [L,R=302]

Что я хочу добавить:

  1. Если мы собираемся перейти на настольную версиюлибо с мобильного телефона, либо при обычном посещении рабочего стола, убедитесь, что он всегда добавляет www.
  2. Для перенаправления с рабочего стола на мобильный, перенаправьте на соответствующую мобильную страницу, но, если она не существует, по умолчанию используется мобильный дом.(Пример: если вы зашли на сайт website.com/chairs на своем мобильном телефоне, он попытается перенаправить на m.website.com/chairs, но если его не будет, он вместо этого перенаправит на m.website.com. Я думаю, что отображение будетбыть что-то вроде ^ (. *) $ http://m.website.com/$1,, но не уверен, как реализовать переход на домашнюю страницу

Кроме того, если кто-то заметит какие-либо ошибки или улучшения в текущем коде, он хотел бы услышать это какхорошо!

Ответы [ 2 ]

0 голосов
/ 05 июня 2013

RewriteEngine On RewriteBase /

RewriteCond% {HTTP_USER_AGENT} (android | bb \ d + | meego). + Mobile | avantgo | bada / | blackberry | blazer | compal | elaine | fennec | hiptop | iemobile | ip (hone | od) | iris | kindle | lge \ | maemo | midp | mmp | netfront | опера \ m (ob | in) i | palm (\ os)? | телефон | p (ixi | re) / | plucker | pocket | psp | серия (4 | 6 ) 0 | symbian | treo | up. (Браузер | ссылка) | vodafone | wap | windows \ (ce | phone) | xda | xiino [NC, OR] RewriteCond% {HTTP_USER_AGENT} ^ (1207 | 6310 | 6590 | 3gso | 4thp | 50 [1-6] i | 770s | 802s | a \ wa | abac | ac (er | oo | s-) | ai (ko | rn ) | al (av | ca | co) | amoi | an (ex | ny | yw) | aptu | ar (ch | go) | as (te | us) | attw | au (di | -m | r \ | s \) | avan | be (ck | ll | nq) | bi (lb | rd) | bl (ac | az) | br (e | v) w | bumb | bw- (n | u) | c55 / | чапи | CCWA | CDM-| клетка | chtm | CLDC | Cmd- | со (тр | й) | зоб | да (это | LL | нг) | dbte | DC-ы | деви | DICA | DMOB | делать (с | р) O | DS (12 | -d) | эль (49 | аг) | ет (l2 | мкл) | э (IC | к0) | esl8 | эз ([4-7] 0 | ос | ва | ге) | fetc | fly (- | ) | g1 \ u | g560 | ген | gf-5 | g-mo | go (.w | od) | gr (ad | un) | haie | hcit | hd- ( m | p | t) | hei- | hi (pt | ta) | hp (\ i | ip) | hs-c | ht (c (- | \ | | a | g | p | s | t) ) | tp) | hu (aw | tc) | i- (20 | go | ma) | i230 | iac (\ | - | /) | ibro | idea | ig01 | ikom | im1k | inno | ipaq | iris | ja (t | v) a | jbro | jemu | jigs | kddi | keji | kgt (\ | /) | klon | kpt \ | kwc- | kyo (c | k) | le (no | xi) | lg (\ g | / (к | л | и) | 50 | 54 | - [ав]) | libw | рысь | m1-ш | m3ga | m50 / | ма (т | щ | хо) | тс (01 | 21 | са) | m-cr | me (rc | ri) | mi (o8 | oa | ts) | mmef | mo (01 | 02 | bi | de | do | t (- | \ | o | v) | zz) | mt (50 | p1 | v \) | mwbp | mywa | n10 [0-2] | n20 [2-3] | n30 (0 | 2) | n50 (0 | 2 | 5) | n7 (0 (0 | 1) ) | 10) | пе ((с | м) - | на | TF | ВФ | РГ | вес) | нок (6 | я) | nzph | o2im | оп (ти | WV) | Оран | owg1 | p800 | сковорода (а | д | т) | pdxg | пг (13 | - ([1-8] | с)) | фил | Pire | пл (ау | ЯК) | рп- 2 | ро (ск | к.т. | се) | Prox | PSIO | PT-г | QA-а | дс (07 | 12 | 21 | 32 | 60 | - [2-7] | I-) | Qtek | R380 | R600 | ракс | rim9 | ро (ве | зо) | S55 / | са (GE | ма | мм | мс | пу | ва) | СБН (01 | H- | оо | р-) | SDK / | себе (с (- | 0 | 1) | 47 | тс | й | п) | sgh- | шар | Sie (- | м) | ск-0 | сл (45 | ID) | см (ал | ар | b3 | это | t5) | so (ft | ny) | sp (01 | h- | v- | v \) | sy (01 | mb) | t2 (18 | 50) | t6 (00 | 10 | 18) | ta (gt | лк) | tcl- | tdg- | тел (я | м) | отсчёт | т-мо | к (пл | ш) | ц (70 | м- | м3 | m5) | ТХ-9 | вверх (. б | g1 | си) | utst | V400 | V750 | Вери | VI (гк | tэ) | VK (40 | 5 [0-3] | -v) | vm40 | Водэ | vulc | ое (52 | 53 | 60 | 61 | 70 | 80 | 81 | 83 | 85 | 98) | w3c (- | \) | webc | whit | wi (g \ | nc | nw) | wmlb | wonu | x700 | yas- | your | zeto | zte-) [NC] RewriteRule ^ $ http://detectmobilebrowser.com/mobile [R, L]

0 голосов
/ 28 ноября 2011
RewriteEngine on

# Check if this is the desktop to mobile query string
RewriteCond %{QUERY_STRING} (^|&)m=1(&|$)

# Set a cookie, and skip the next 2 rules 
RewriteRule ^ - [CO=mredir:1:%{HTTP_HOST},S=2]

# Check if this is the mobile to desktop query string
RewriteCond %{QUERY_STRING} (^|&)m=0(&|$)

# Set a cookie, and skip the next rule
RewriteRule ^ - [CO=mredir:0:%{HTTP_HOST},S]

RewriteCond %{HTTP_USER_AGENT} "android|blackberry|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC]

# Check if we're not already on the mobile site
RewriteCond %{HTTP_HOST} !^m\.

# Can not read and write cookie in same request, must duplicate condition
RewriteCond %{QUERY_STRING} !(^|&)m=0(&|$) 

# Check to make sure we haven't set the cookie before
RewriteCond %{HTTP_COOKIE} !^.*mredir=0.*$ [NC]

RewriteRule ^(.*)$ http://m.website.com/ [L,R=302]

# 1.) Check if on desktop site and having www., if not redirect to www.website.com
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} !^m\. [NC]
RewriteRule ^(.*)$ http://www.website.com$1 [R=301,L]

2.) Это не может быть сделано с помощью mod_rewrite, за исключением того, что "/ стулья" - это существующий файл (и я предполагаю, что это не так). Так что я бы проверил это на желаемом языке сценариев - например, в php:

if (!pageexists($_GET['page']) && $_SERVER['HTTP_HOST'] == 'm.website.com')
  header("Location: http://m.website.com/");

где pageexists () - это функция, которую вы определяете для проверки наличия контента для этой страницы в мобильной версии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...