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;
}
我正在尝试为使用参数指向数据的 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;
}