La detección del navegador móvil con .htaccess falla con Opera Mini

Estoy teniendo problemas para resolver esto. Estoy tratando de dirigir el tráfico móvil a la versión móvil de un sitio web a través de la detección de HTACCESS User-Agent, así:

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]

La cuerdamini|mobi Es donde se debe detectar el navegador Opera Mini. Sin embargo, esto NO sucede. También he cambiado esa cadena aopera m y otras variaciones. Todavía no hay suerte.

Esta condición de reescritura parece funcionar con otros navegadores móviles, pero no con Opera, y no entiendo por qué. Incluso la segunda condición, que comprueba si hay un puntero explícito a lamobile. El subdominio tampoco logra entregar el contenido móvil.

No soy un gurú de HTACCESS, así que mi primera suposición es que mi sintaxis es incorrecta. Pero, ¿por qué funciona esto en otros navegadores móviles y no en Opera Mini?

¡Gracias por mirar!

ACTUALIZACIÓN: 2012-06-08

En realidad, recurrí a un método diferente usando PHP para verificar los encabezados. Por alguna razón, mi archivo HTACCESS no detectó cierta información de encabezado. A pesar de que la respuesta de karlcow se validaría, tuve problemas para validar los navegadores Android de iPhone y de terceros. No fue hasta que se pasó una página al intérprete de PHP que pude leer la información. Supongo que no entiendo cómo funciona eso.

De todos modos, tomé prestado el código de una búsqueda en Internet que coloqué en una función 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 función se llama como parte de un proceso de flejado para el sitio web, de modo que antes de que se produzca algo, el$view se devuelve para que se carguen las páginas y las hojas de estilo apropiadas.

Además, modifiqué mi archivo HTACCESS para que contenga lo siguiente:

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 puede ver, solo estoy redireccionando llamadas explícitas para el móvil. subdominio, y aquellos que no contienen una cookie que retiene el$view Establecer durante el proceso de flejado.

Mi intención original era realizar la detección del navegador utilizando exclusivamente HTACCESS; Debido a la simplicidad y bajo la premisa del poder de mod_rewrite. Pero en mi frustración, y para cumplir con la fecha límite, me comprometí a conformarme con un método más grueso que podría requerir más mantenimiento en el futuro.

Lección aprendida: Cree sitios web receptivos basados ​​en las capacidades del navegador (es decir, resolución, toque y nivel DOM), y no confíe demasiado en las cadenas de agente de usuario. ¿Tenemos todavía una solución como esta?

Gracias por mirar.

Respuestas a la pregunta(2)

Su respuesta a la pregunta