如何在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; } }
配置说明
- 变量初始化:先定义
$redirect_flag为0(默认不重定向)。 - 逐个判断条件:
- 当用户代理不是指定爬虫时,将标记设为
1; - 如果存在
currencyCookie,或者当前路径已经是/currency,则将标记重置为0;
- 当用户代理不是指定爬虫时,将标记设为
- 最终执行:只有当标记为
1时,才触发重定向。
这种方式避免了if嵌套,符合Nginx的配置规范,同时清晰关联了所有需要的判断条件。
内容的提问来源于stack exchange,提问作者Kiel Ed
相关产品推荐
相关产品推荐

