Я использую NGINX для сегментирования мобильного трафика между мобильным WAP / HTML-сайтом.Похоже, что лучший способ сделать это - проверить предпочтения UA для контента, проверив заголовок HTTP Accept.
Предпочтение для WAP указывается появлением в заголовке mimetype «wap».перед 'html' или подстановочным символом Mimetype.
Таким образом, Sony Ericsson w300i предпочитает WAP:
multipart/mixed, application/vnd.wap.multpart.mixed,applicatnoin/vnd.wap.xhtml_xml,application/xhtml+xml,text/ved.wap.wl,*/*,text/x-hdml,image/mng,/\image/x-mng,ivdeo/mng,video/x-mng,ima/gebmp,text/html
, а Blackberry Bold предпочитает HTML:
text/html,application/xhtml+xml,application/vnd.wap.xhtml+xml,application/vnd.wp.wmlc;q=0.9,application/vnd.awp.wmlscriptc;q=0.7,text/vnd.wap.wml;q=07,/vnd/.sun.j2me.app-descriptor,*/*;q=0.5
Поскольку я нахожусь на земле NGINX, мне кажется, что лучший инструмент, который у меня есть, это регулярные выражения NGINX (PCRE).
Сейчас я пытаюсь использовать отрицательный взгляд, чтобы утверждать: "Принятьзаголовок содержит WAP, но не предшествует HTML ":
(?!html.*)wap
Но это не правильно.Есть ли другой способ думать об этой проблеме?Или моя логика сопоставления?
До сих пор я находил полезными следующие ресурсы регулярных выражений:
http://www.regular -expressions.info / completetelines.html http://www.zytrax.com/tech/web/regex.htm http://wiki.nginx.org/NginxHttpRewriteModule
Спасибо!
Спасибо за ответ, вот соответствующие тесты:
import re
prefers_wap_re = re.compile(r'^(?!(?:(?!wap).)*html).*?wap', re.I)
tests = [
('', False),
('wap', True),
('wap html', True),
('html wap', False),
]
for test, expected in tests:
result = prefers_wap_re.search(test)
assert bool(result) is expected, \
'Tested "%s", expected %s, got %s.' % (test, expected, result)