Como posso usar o apache para redirecionar usuários (baseado em user_agent e usando mod_rewrite) para o meu site móvel somente se existir uma página móvel.

3

Desejo detectar usuários de dispositivos móveis com base em seu user_agent.

Se um usuário estiver navegando na versão completa do site e tiver um determinado user_agent, eu quero redirecioná-lo (usando mod_rewrite) para o site para celular - se a página para celular existir.

Exemplo de URL de site completo link Exemplo de URL de site para dispositivos móveis equivalente (observe .htm em vez de .html) link

Eu preciso fazer isso com o apache e não com algo parecido com php

Bônus: o site para celular pode ter links para o site completo (se a página não tiver um equilíbrio móvel) e eu quero continuar redirecionando as pessoas e quero continuar o redirecionamento, a menos que as pessoas cliquem em um "Site Completo" link que irá excluí-los do redirecionamento através de um parâmetro url - ex:? ver = ful

    
por ckliborn 23.01.2012 / 22:12

2 respostas

1

Eu vou ter uma facada.

No site completo vhost:

RewriteCond %{HTTP­_US­ER_­AGENT} Some-Mobile-UA [OR]
RewriteCond %{HTTP­_US­ER_­AGENT} Some-Other-Mobile-UA [OR]
RewriteCond %{HTTP­_US­ER_­AGENT} Yet-Another-Mobile-UA [OR]
RewriteCond %{HTTP­_US­ER_­AGENT} The-Final-Mobile-UA
RewriteCond /var/www/mobile%{REQU­EST­_URI} -f
RewriteCond %{HTTP­_CO­OKIE} !stayOnFullSite
RewriteRule /(.*)l http://m.domain.com/$1 [R]

E no site móvel vhost:

RewriteCond %{QUER­Y_S­TRING} ver=full
RewriteRule ^ - [CO=stayOnFullSite:true]

RewriteCond %{REQU­EST­_FI­LENAME} !-f
RewriteCond /var/www/html%{REQU­EST­_URI}l -f
RewriteRule /(.*) http://www.domain.com/$1l [R]

Notas:

Eu cortei o "l" do .html ao redirecionar para o site para dispositivos móveis e o adicionei novamente ao redirecionar de volta.

Também o cortei ao verificar se o arquivo existe no site principal, mas não consigo descobrir como removê-lo ao verificar se o arquivo existe no site para dispositivos móveis. Possivelmente outro RewriteCond na frente dele que corresponda a todos menos o "l" final em %{REQUEST_URI} e então use %1 no seguinte RewriteCond assim:

RewriteCond %{REQU­EST­_URI} (.*)l
RewriteCond /var/www/mobile%1 -f

Pode ser mais fácil padronizar seu site em uma única extensão de arquivo.

Você pode definir o restante dos parâmetros de cookie disponíveis. Os detalhes estão nos documentos do mod_rewrite e no seção sobre sinalizadores .

Esta configuração é completamente não testada.

    
por 23.01.2012 / 23:43
1

Procure O Apache Mobile Filter é gratuito, fácil de instalar e configurado. Aqui está um exemplo:

#Configuration AMF Filter
#
PerlSetEnv AMFMobileHome /usr/local/AMF
PerlSetEnv AMFProductionMode true
PerlSetEnv ServerMemCached localhost:11211

PerlTransHandler +Apache2::AMFLiteDetectionFilter
RewriteEngine on
RewriteCond %{ENV:AMF_DEVICE_IS_MOBILE} ^true*
RewriteRule ^(.*)$ http://m.foo.org [R=301,L]

Deixe-me saber

    
por 07.02.2012 / 15:44