标签为 "&&" 的存档

nginx if判断 and 使用

360图片搜索遇到这么一个场景,pc端的搜索结果页和频道列表页,在移动端访问时,检测到是移动版的ua,会自动跳转到对应的移动端结果页或频道列表页。
现在,pc端新上了一个频道,服饰频道,但是移动端还没开发。当在移动端访问pc版的服饰频道页时,会跳转到移动端的频道页,但是没有服饰频道,所以跳转到了默认的美女频道,体验不好。
所以,就需要做一个处理,当发现是服饰频道时,不跳转,保持pc端的展示。

之前的nginx配置是判断ua后,就决定是否跳转。

if ($http_user_agent ~* "^((.*android.*)|(.*Mobile Safari.*)|(.*windows phone os.*)|acer|zte|lenovo|moto|samu|nokia|sony|kindle|240x320|mobile|mmp|ucweb|midp|pocket|psp|symbian|smartphone|treo    |up.browser|up.link|vodafone|wap)") {
         rewrite "^/$"              http://m.image.so.com/ permanent;
         rewrite "^/([z|i])$"       http://m.image.so.com/$1 permanent;
     }

现在需要对频道页判断,而由于频道页是通过参数传入,而不是在path里边,所以使用rewrite规则无法解决。
其实就可以使用$request_uri判断就可以了。本来是打算在if里通过 and 或者 && 解决,结果发现不支持。
查了资料后,发现一个方便实现的方法,通过两次判断,设置变量的形式。
如下:

    if ($http_user_agent ~* "^((.*android.*)|(.*Mobile Safari.*)|(.*windows phone os.*)|acer|zte|lenovo|moto|samu|nokia|sony|kindle|240x320|mobile|mmp|ucweb|midp|pocket|psp|symbian|smartphone|treo    |up.browser|up.link|vodafone|wap)") {
         set $mobile 1;
     }
     if ($request_uri ~* ".*ch=fushi.*"){
         set $mobile 0;
     }
     if ($mobile = 1){
         rewrite "^/$"              http://m.image.so.com/ permanent;
         rewrite "^/([z|i])$"       http://m.image.so.com/$1 permanent;
     }

Read more…