我使用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