You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Nginx配置文件中实现map功能?解决嵌套if报错问题

解决Nginx嵌套if配置错误的方案

你的需求是:当请求的用户代理不是Googlebot/BingBot、没有currency Cookie,且当前请求路径不是/currency时,重定向到/currency。由于Nginx不支持if嵌套,你可以通过变量累积条件的方式实现,这是Nginx官方推荐的多条件判断方案。

具体配置代码

server {
    # 其他server配置...

    # 初始化标记变量,默认不需要重定向
    set $redirect_flag 0;

    # 条件1:用户代理不是指定爬虫
    if ($http_user_agent !~* (Googlebot|BingBot)) {
        set $redirect_flag 1;
    }

    # 条件2:存在currency Cookie,取消重定向标记
    if ($cookie_currency != "") {
        set $redirect_flag 0;
    }

    # 条件3:当前路径已经是/currency,取消重定向标记
    if ($request_uri ~ ^/currency) {
        set $redirect_flag 0;
    }

    # 所有条件满足时执行重定向
    if ($redirect_flag = 1) {
        rewrite ^ /currency redirect;
    }
}

配置说明

  1. 变量初始化:先定义$redirect_flag为0(默认不重定向)。
  2. 逐个判断条件:
    • 当用户代理不是指定爬虫时,将标记设为1;
    • 如果存在currency Cookie,或者当前路径已经是/currency,则将标记重置为0;
  3. 最终执行:只有当标记为1时,才触发重定向。

这种方式避免了if嵌套,符合Nginx的配置规范,同时清晰关联了所有需要的判断条件。

内容的提问来源于stack exchange,提问作者Kiel Ed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 18:22:44