Detecção de navegador móvel com .htaccess falha com o Opera Mini

Estou tendo problemas para descobrir isso. Estou tentando direcionar o tráfego de celular para a versão móvel de um site por meio do snapshot de agente de usuário do HTACCESS, assim:

RewriteCond %{HTTP_USER_AGENT} (android|blackberry|ipad|iphone|ipod|iemobile|mini|mobi|palmos|webos|googlebot\-mobile) [NC]
RewriteCond %{HTTP_HOST} ^mobile\.mywebsite\.com$
RewriteRule ^([aA0-zZ9\-\/]*)/([^/]*)$ /index.php?page=$1&q=$2&q2=$3&setview=mobile [L,QSA]

A cordamini|mobi é onde o navegador Opera Mini deve ser detectado. No entanto, isso não acontece. Eu também mudei essa string paraopera m e outras variações. Ainda sem sorte.

Essa condição de reescrita parece funcionar com outros navegadores móveis, mas não o Opera, e não entendo o motivo. Mesmo a segunda condição, que verifica um ponteiro explícito para omobile. O subdomínio também não fornece o conteúdo móvel.

Eu não sou um guru do HTACCESS, então meu primeiro palpite é que minha sintaxe está errada. Mas por que isso funciona em outros navegadores móveis e não no Opera Mini?

Obrigado por olhar!

ATUALIZAÇÃO: 2012-06-08

Eu realmente recorri a um método diferente usando PHP para verificar cabeçalhos. Por algum motivo, meu arquivo HTACCESS não detectou determinadas informações de cabeçalho. Mesmo que a resposta de karlcow fosse validar, eu estava tendo problemas para validar o iPhone e os navegadores Android de terceiros. Não foi até que uma página foi passada para o interpretador do PHP que eu era capaz de ler as informações. Eu acho que não entendo como isso funciona.

De qualquer forma, eu peguei o código de uma pesquisa na Internet que coloquei em uma função de biblioteca:

function get_device_view() {    
    $view='desktop';
    if(preg_match('/(up.browser|up.link|mmp|symbian|smartphone|midp|wap|phone|android)/i', strtolower($_SERVER['HTTP_USER_AGENT'])))
        $view='mobile';
    if((strpos(strtolower($_SERVER['HTTP_ACCEPT']),'application/vnd.wap.xhtml+xml')>0) || ((isset($_SERVER['HTTP_X_WAP_PROFILE']) || isset($_SERVER['HTTP_PROFILE']))))
        $view='mobile';
    $mobile_ua=strtolower(substr($_SERVER['HTTP_USER_AGENT'],0,4));
    $mobile_agents=array(
        'w3c ','acs-','alav','alca','amoi','audi','avan','benq','bird','blac',
        'blaz','brew','cell','cldc','cmd-','dang','doco','eric','hipt','inno',
        'ipaq','java','jigs','kddi','keji','leno','lg-c','lg-d','lg-g','lge-',
        'maui','maxo','midp','mits','mmef','mobi','mot-','moto','mwbp','nec-',
        'newt','noki','oper','palm','pana','pant','phil','play','port','prox',
        'qwap','sage','sams','sany','sch-','sec-','send','seri','sgh-','shar',
        'sie-','siem','smal','smar','sony','sph-','symb','t-mo','teli','tim-',
        'tosh','tsm-','upg1','upsi','vk-v','voda','wap-','wapa','wapi','wapp',
        'wapr','webc','winw','winw','xda ','xda-');
    if(in_array($mobile_ua,$mobile_agents))
        $view='mobile';
    if (strpos(strtolower($_SERVER['ALL_HTTP']),'OperaMini')>0)
        $view='mobile';
    if(strpos(strtolower($_SERVER['HTTP_USER_AGENT']),'windows')>0)
        $view='desktop';
    return $view;
}

Esta função é chamada como parte de um processo de captura para o site, de forma que antes que qualquer coisa seja$view é retornado para que páginas e folhas de estilo apropriadas sejam carregadas.

Além disso, modifiquei meu arquivo HTACCESS para conter o seguinte:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_COOKIE} !((^|;\s*)DD_VIEW=([^;]+))
RewriteCond %{HTTP_HOST} mobile\.buffalosbigdeal\.com
RewriteRule ^([aA0-zZ9\-\/]*)/*([^/]*)$ /index.php?page=$1&q=$2&q2=$3&setview=mobile [L,QSA]

Como você pode ver, estou redirecionando apenas chamadas explícitas para o celular. subdomínio, e aqueles que não contenham um cookie que retenha o$view definido durante o processo de strapper.

Minha intenção original era realizar a detecção de navegadores exclusivamente usando o HTACCESS; por causa da simplicidade e sob a premissa do poder do mod_rewrite. Mas, em minha frustração, e para cumprir o prazo, comprometi-me com um método mais robusto que pode exigir mais manutenção no futuro.

Lição aprendidaCrie sites responsivos com base nos recursos do navegador (por exemplo: resolução, toque e nível DOM) e não se baseie muito nas cadeias de agentes do usuário. Ainda temos uma solução como essa?

Obrigado por olhar.

questionAnswers(2)

yourAnswerToTheQuestion