我使用NGINX在移動WAP/HTML網站之間劃分移動流量。看起來最好的方法是通過檢查HTTP Accept Header來檢查UA對內容的偏好。正則表達式匹配「wap」前面沒有「html」
對WAP的偏好是通過在'html'或通配符mimetype之前的頭部中'wap'mimetype的出現來指示的。
所以索尼愛立信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大膽對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 preceeded」:
(?!html.*)wap
但是,這是不正確的。有沒有不同的方式可以考慮這個問題?或者我的匹配邏輯?
到目前爲止,我發現這些有用的正則表達式資源:
http://www.regular-expressions.info/completelines.html http://www.zytrax.com/tech/web/regex.htm http://wiki.nginx.org/NginxHttpRewriteModule
謝謝!
感謝您的回答,這裏有相關測試:
我希望:) NGINX使用PCRE不支持可變長度的lookbehind斷言:[emerg]:pcre_compile()失敗:lookbehind斷言在/etc/nginx/nginx.conf中的「(?<!html。*)wap」中的「wap」處不是固定長度:46 – jbox 2010-10-01 23:31:24
@ jbox:我已經更新了我的答案。那對你有用嗎? – 2010-10-01 23:36:37
暫時,是的它:) – jbox 2010-10-02 00:20:13