在nginx中使用regexp的正确Map是什么?

abithluo  于 2022-11-02  发布在  Nginx
关注(0)|答案(1)|浏览(260)

我想使用不同的版本取决于浏览器版本和设备。例如在“移动的chrome/80+版本”我需要有modern-bundle和较低的版本-legacy-bundle。但现代版本的桌面低于移动:“chrome/70+版本”必须具有modern-bundle,且必须低于70 -legacy-bundle
我用两个Map试了一下这个代码,但最后我总是用legacy-bundle代替modern-bundle,有什么问题吗?

map $http_user_request $is_mobile {
    default         false;
    "~*Mobile"      true;
}

map "$http_user_request:$is_mobile" $modern_browser {
    default     "";
    "~Chrome\/([8-9][0-9]|\d{3,})\.:true"       "modern-bundle";
    "~Chrome\/([7-9][0-9]|\d{3,})\.:false"      "modern-bundle";
}
yquaqz18

yquaqz181#

我找到了我问题的答案。只需要再添加一个变量来Map

map $http_user_request $is_mobile {
    default         false;
    "~Mobile"       true;
}

map "$http_user_request:$is_mobile:$http_user_request" $modern_browser {
    default     "";
    "~Chrome\/([8-9][0-9]|\d{3,})\..*:true:"       "modern-bundle";
    "~Chrome\/([7-9][0-9]|\d{3,})\..*:false:"      "modern-bundle";
}

相关问题