Nginx能否检测URL多参数并返回同一文件?合并if语句可行吗?
可以实现,合并后的Nginx配置如下
你可以通过正则表达式的**或(|)**操作符,把两个参数检测合并到同一个if语句中,具体修改后的配置如下:
location /app/ { location ~ "^(.*)/([^/]+)_flag\.(.*)$" { try_files $uri $1/$2.$3 =404; } if ( $args ~ "^.*(flag1|flag2).*$" ) { rewrite ^(.*)/([^/]+(?<!_flag))\.(.*)$ $1/$2_flag.$3 last; } }
逻辑说明
- 正则
^(.*)(flag1|flag2).*$会匹配URL参数中包含flag1或flag2的请求,和原来两个if语句的检测逻辑完全等价 - 保留原有的
rewrite规则即可,因为两个原if里的重写逻辑完全一致 - 合并后不仅简化了配置,还能避免Nginx中多个
if语句可能引发的执行顺序问题
内容的提问来源于stack exchange,提问作者Shubham
相关产品推荐
相关产品推荐

