Wykrywanie przeglądarki mobilnej za pomocą .htaccess kończy się niepowodzeniem w przypadku Opera Mini

Mam problem z obliczeniem tego. Próbuję skierować ruch mobilny do mobilnej wersji strony internetowej za pomocą wąchania HTACCESS User-Agent, tak:

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]

Ciągmini|mobi gdzie powinna zostać wykryta przeglądarka Opera Mini. Jednak tak się nie dzieje. Zmieniłem też ten ciąg naopera m i inne odmiany. Wciąż nie ma szczęścia.

Ten warunek przepisywania działa z innymi przeglądarkami mobilnymi, ale nie z Operą i nie rozumiem dlaczego. Nawet drugi warunek, który sprawdza wyraźny wskaźnik domobile. subdomena również nie dostarcza treści mobilnych.

Nie jestem guru HTACCESS, więc moim pierwszym przypuszczeniem jest, że moja składnia jest błędna. Ale dlaczego to działa na innych przeglądarkach mobilnych, a nie na Operze Mini?

Dzięki za szukanie!

AKTUALIZACJA: 2012-06-08

Właściwie skorzystałem z innej metody, używając PHP do sprawdzania nagłówków. Z jakiegoś powodu mój plik HTACCESS nie wykrył pewnych informacji nagłówka. Mimo że odpowiedź karlcowa byłaby poprawna, miałem problemy z sprawdzeniem poprawności przeglądarek iPhone i innych firm z Androidem. Dopiero po przekazaniu strony interpreterowi PHP mogłem odczytać informacje. Chyba po prostu nie rozumiem, jak to działa.

W każdym razie pożyczyłem kod z wyszukiwania internetowego, które umieściłem w funkcji biblioteki:

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

Ta funkcja jest wywoływana jako część procesu strapper na stronie internetowej, więc zanim cokolwiek zostanie wydane,$view jest zwracany, aby załadować odpowiednie strony i arkusze stylów.

Ponadto zmodyfikowałem mój plik HTACCESS, aby zawierał następujące elementy:

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]

Jak widać, przekierowuję tylko wyraźne wywołania dla telefonu komórkowego. subdomena i te niezawierające pliku cookie, który zachowuje$view ustawione podczas procesu strappera.

Moim pierwotnym zamiarem było wykrywanie przeglądarki wyłącznie za pomocą HTACCESS; z powodu prostoty i założenia mocy mod_rewrite. Ale w mojej frustracji i aby dotrzymać terminu, poszedłem na kompromis, ustalając bardziej masywną metodę, która może wymagać więcej konserwacji w przyszłości.

Lekcja dowiedziona: Buduj responsywne strony internetowe w oparciu o możliwości przeglądarki (np. Rozdzielczość, dotyk i poziom DOM) i nie polegaj w znacznym stopniu na ciągach agentów użytkownika. Czy mamy takie rozwiązanie?

Dzięki za szukanie.

questionAnswers(2)

yourAnswerToTheQuestion