Обнаружение мобильного браузера с помощью .htaccess не удается с Opera Mini

У меня проблемы с выяснением этого. Я пытаюсь направить мобильный трафик на мобильную версию веб-сайта через анализатор HTACCESS User-Agent, например, так:

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]

Строкаmini|mobi где браузер Opera Mini должен быть обнаружен. Однако этого не происходит. Я также изменил эту строку наopera m и другие варианты. Все еще не повезло.

Это условие перезаписи работает с другими мобильными браузерами, но не с Opera, и я не понимаю, почему. Даже второе условие, которое проверяет явный указатель наmobile. субдомен также не может доставить мобильный контент.

Я не гуру HTACCESS, поэтому я считаю, что мой синтаксис неверен. Но почему это работает на других мобильных браузерах, а не на Opera Mini?

Спасибо за внимание!

UPDATE: 2012-06-08

Я фактически прибег к другому методу, используя PHP для проверки заголовков. По какой-то причине мой файл HTACCESS не обнаружил определенную информацию заголовка. Даже если ответ karlcow будет подтвержден, у меня возникли проблемы с проверкой браузеров iPhone и Android сторонних производителей. Только когда страница была передана интерпретатору PHP, я смог прочитать информацию. Полагаю, я просто не понимаю, как это работает.

Во всяком случае, я позаимствовал код из поиска в Интернете, который я поместил в библиотечную функцию:

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

Эта функция вызывается как часть процесса загрузки для веб-сайта, так что, прежде чем что-либо выводится,$view возвращается, так что загружаются соответствующие страницы и таблицы стилей.

Кроме того, я изменил свой файл HTACCESS, чтобы он содержал следующее:

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]

Как видите, я только перенаправляю явные вызовы на мобильный телефон. субдомен, и те, которые не содержат cookie, который сохраняет$view установить во время процесса стриппера.

Моим первоначальным намерением было выполнить обнаружение браузера исключительно с использованием HTACCESS; из-за простоты и в соответствии с мощью mod_rewrite. Но из-за моего разочарования и из-за того, что я уложился в срок, я пошел на компромисс, выбрав более громоздкий метод, который в будущем может потребовать дополнительного обслуживания.

Lesson learned: Создавайте адаптивные веб-сайты на основе возможностей браузера (т. Е. Разрешения, касания и уровня DOM) и не в значительной степени полагайтесь на строки агента пользователя. У нас еще есть решение, подобное этому?

Спасибо за поиск.

Ответы на вопрос(2)

Ваш ответ на вопрос