Die Erkennung mobiler Browser mit .htaccess schlägt mit Opera Mini fehl

Ich habe Probleme, das herauszufinden. Ich versuche, den mobilen Datenverkehr über HTACCESS User-Agent-Sniffing auf die mobile Version einer Website umzuleiten:

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]

Die Saitemini|mobi Hier sollte der Opera Mini-Browser erkannt werden. Dies geschieht jedoch NICHT. Ich habe diese Zeichenfolge auch in geändertopera m und andere Variationen. Immer noch kein Glück.

Diese Umschreibebedingung scheint mit anderen mobilen Browsern zu funktionieren, jedoch nicht mit Opera, und ich verstehe nicht, warum. Auch die zweite Bedingung, die nach einem expliziten Zeiger auf die suchtmobile. Die Subdomain kann den mobilen Inhalt auch nicht bereitstellen.

Ich bin kein HTACCESS-Guru und meine erste Vermutung ist, dass meine Syntax falsch ist. Aber warum funktioniert das auf anderen mobilen Browsern und nicht auf Opera Mini?

Danke fürs schauen!

UPDATE: 08.06.2012

Ich habe tatsächlich auf eine andere Methode zurückgegriffen, indem ich mit PHP Header überprüft habe. Aus irgendeinem Grund hat meine HTACCESS-Datei bestimmte Header-Informationen nicht erkannt. Obwohl die Antwort von Karlcow sich bestätigen ließ, hatte ich Probleme, das iPhone und Android-Browser von Drittanbietern zu überprüfen. Erst als eine Seite an den PHP-Interpreter übergeben wurde, konnte ich die Informationen lesen. Ich verstehe einfach nicht, wie das funktioniert.

Wie auch immer, ich habe mir Code von einer Internetsuche ausgeliehen, die ich in eine Bibliotheksfunktion gestellt habe:

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;
}

Diese Funktion wird im Rahmen eines Strapper-Prozesses für die Website aufgerufen, damit vor der Ausgabe nichts mehr ausgegeben wird$view wird zurückgegeben, damit die entsprechenden Seiten und Stylesheets geladen werden.

Außerdem habe ich meine HTACCESS-Datei so geändert, dass sie Folgendes enthält:

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]

Wie Sie sehen, leite ich nur explizite Anrufe für das Handy um. Subdomain und solche, die keinen Cookie enthalten, der die$view während des Umreifungsprozesses eingestellt.

Meine ursprüngliche Absicht war es, die Browsererkennung ausschließlich mit HTACCESS durchzuführen. der Einfachheit halber und unter der Prämisse von mod_rewrites Macht. Aber in meiner Frustration und um die Frist einzuhalten, habe ich mich für eine klobigere Methode entschieden, die in Zukunft möglicherweise mehr Wartung erfordert.

Lektion gelernt: Erstellen Sie reaktionsschnelle Websites basierend auf den Browserfunktionen (z. B. Auflösung, Berührung und DOM-Ebene) und verlassen Sie sich nicht stark auf Zeichenfolgen von Benutzeragenten. Haben wir noch eine Lösung wie diese?

Danke fürs schauen.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage