Nginx 重写任何参数名称

Nginx rewrite any arg name

我正在尝试为使用参数指向数据的 CDN 系统构建重写。所有数据都存储在同一位置,因此任何重写都需要通配符重写 $arg_name,然后传递数据的值。转这个:

http://cdn.example.com/data/?main_loc=datastring

进入这个:

http://example.com/datastore/datastring

使用位置指令我可以将请求获取到 /data/,但从那里我不知道重写需要是什么样子才能像 main_loc 那样“匹配任何参数名称” , backup_loc 等将其值作为重写传递。 我可以应用正则表达式来匹配任何 $arg_name 并使用其中的值吗?

location ^~ /data/ {
    rewrite ^$arg_(\w*\_\w*)$ http://example.com/datastore/;
}

或者那会是什么样子?

您可以使用以下映射捕获 arg 值:

map $args $arg_value {
    ~=(.*) ;
}

然后重定向到它:

location = /data/ {
    return 301 http://example.com/datastore/$arg_value;
}