Задача: на любой запрос от браузера IE 6 и ниже выдать статическую страницу ie6.html
Остальным версиям IE выдать то, что просят
Реализация: проверять строку заголовка HTTP_USER_AGENT
location / {
if ($http_user_agent ~ "MSIE [4-6]") {
rewrite ^/(.*)$ /ie6.html break;
}
}
Но столкнулся с такой интересной сложностью: у одного из посетителей стоит IE8, но его постоянно переадресует на ie6.html
Cтрока HTTP_USER_AGENT (по логам) от этого пользователя имеет такой вид:
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; MRSPUTNIK 2, 0, 1, 90 HW; MRA 5.6 (build 03278); Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 1.1.4322; MRIE8PACK 2.0.1)
То есть в ней присутствует подстрока "MSIE 6" и одновременно с тем есть подстрока "MSIE 8"
Я предположил, что регулярное выражение с отрицательным предпросмотром решит проблему.
if ($http_user_agent ~ "(?<!MSIE 8)MSIE [4-6]") {
rewrite ^/(.*)$ /ie6.html break;
}
Но оно не срабатывает.
Вот такое выражение в данном случае должно выполнить реврайт на ie8.html
if ($http_user_agent ~ "(?<=MSIE\s8)MSIE [4-6]") {
rewrite ^/(.*)$ /ie8.html break;
}
Оно тоже не срабатывает.
Как исключить реврайт на ie6.html в такой ситуации?
--
Павел Волынцев
E-mail: <pavel.volyntsev@xxxxxxxxx>
ICQ #: 55951947
Mobile Phone #: +7 913 902 4872
Skype: pavel.volyntsev
WWW: http://copist.ru/ & http://scripted.in/
|