переписывание URL для планшета и смартфона

Я использую URL перезаписи Apache. Файл .htaccess содержит следующие правила перенаправления. Мое требование состоит в том, что всякий раз, когда я нажимаю на URL-адрес www.temp.com/card, в зависимости от устройства он должен внутренне вызывать этот конкретный .do.

Например, со смартфона, если я наберу www.temp.com/card внутри, он должен вызвать www.temp.com/pa/spCard.do.

Я пробовал с приведенными ниже правилами, но проблема в том, что некоторые планшеты имеют Android, поэтому в планшете он всегда переходит в смартфон .do.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC]
RewriteRule ^card/?$ /pa/spCard.do?uri=$1 [QSA]

RewriteCond %{HTTP_USER_AGENT} "ipad" [NC]
RewriteRule ^card/?$ /pa/tabCard.do?uri=$1 [QSA]

RewriteRule ^card/?$ /pa/webCard.do?uri=$1 [QSA]
</IfModule>

Можем ли мы каким-либо образом отличить мобильный телефон Android от планшета (используя строку пользовательского агента)?


person Rosh    schedule 22.04.2013    source источник
comment
Пожалуйста, ребята, кто-нибудь может помочь в этом?   -  person Rosh    schedule 22.04.2013


Ответы (1)


Вы должны остановить дальнейшее изменение, добавив флаг L, когда вы обнаружил устройство

RewriteRule ^card/?$ /pa/spCard.do?uri=$1 [L,QSA]

И вы нигде не зафиксировали $1 в правилах перезаписи. Кроме того, URL-адрес всегда card, поэтому вы можете сократить правило до

RewriteRule ^card/?$ /pa/spCard.do [L]

or

RewriteRule ^card/?$ /pa/spCard.do?uri=$0 [L,QSA]

если вам нужен параметр uri.

То же самое с tabCard.do и webCard.do, конечно.

Чтобы отличить телефоны Android от планшетов, см. раздел Chrome для Android User-Agent. . К сожалению, это справедливо не для всех планшетов. Но, по крайней мере, часть таблеток можно отсеять, указав android.*mobile в первом правиле и просто android во втором.

RewriteCond %{HTTP_USER_AGENT} android.*mobile|blackberry|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile [NC]
RewriteRule ^card/?$ /pa/spCard.do?uri=$0 [L,QSA]

RewriteCond %{HTTP_USER_AGENT} android|ipad [NC]
RewriteRule ^card/?$ /pa/tabCard.do?uri=$0 [L,QSA]

При этих условиях вы будете знать, что у вас есть планшет во втором правиле и телефон или планшет в первом правиле.

person Olaf Dietsche    schedule 22.04.2013
comment
:Можно ли как-нибудь отличить мобильный телефон от планшета (используя строку пользовательского агента)? попробовал несколько правил, но трудно отличить мобильный телефон Android от планшета. - person Rosh; 22.04.2013
comment
@Rosh Разница, кажется, Mobile, см. developers.google.com/chrome/ mobile/docs/user-agent, чтобы узнать подробности. Хотя, похоже, есть планшеты, имеющие Mobile в строке пользовательского агента, см. комментарии к этому ответу, например stackoverflow.com/a/5344382 /1741542 - person Olaf Dietsche; 22.04.2013
comment
проверено на андроид планшете и телефоне. Пользовательский агент планшета имеет мобильный телефон. - person Rosh; 22.04.2013