首页 > 解决方案 > 如何根据 url 参数更改 Nginx 中的别名?

问题描述

我有位置:

location = /conf.js {
alias /config/conf.js;
}

我想确保如果 URL 包含 arg1 参数(例如https://test.com?arg1=4982948394)别名 = /config/conf2.js,在所有其他情况下 /config/conf.js

是否有可能做到这一点?

先感谢您

标签: nginx

解决方案


对的,这是可能的:

map $arg_arg1 $conf {
    4982948394  /config/conf2.js;
    default     /config/conf.js;
}

server {
    ...
    location = /conf.js {
        alias $conf;
    }
    ...

map指令允许正则表达式匹配,根据arg1您可以使用的任何非空值检查请求查询参数

map $arg_arg1 $conf {
    ~.          /config/conf2.js;
    default     /config/conf.js;
}

要检查arg1请求查询字符串中是否存在参数,可以使用以下map块:

map $args $conf {
    ~(^|&)arg1(=|&|$)  /config/conf2.js;
    default            /config/conf.js;
}

您可以在此处查看所有 nginx 内部变量的列表。


推荐阅读