NGINXを使用して、モバイルWAP/HTMLサイト間のモバイルトラフィックをセグメント化しています。これを行うための最良の方法は、HTTPAcceptヘッダーをチェックすることによってコンテンツに対するUAの設定をチェックすることであるように見えます。
WAPの優先順位は、ヘッダーの「html」またはワイルドカードmimetypeの前に「wap」mimetypeが表示されることで示されます。
したがって、SonyEricssonw300iは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
そして、BlackberryBoldは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)のようです。
現在、負の先読みを使用して、「acceptヘッダーにはWAPが含まれていますが、HTMLが先行していません」と主張しようとしています。
(?!html.*)wap
しかし、これは正しくありません。この問題について私が考えることができる別の方法はありますか?または私のマッチングロジック?
これまでのところ、これらの正規表現リソースが役立つことがわかりました。
http://www.regular-expressions.info/completelines.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)