我正在使用它[split_clients]
,大多数情况下它都运行良好。
参考:https://nginx.org/en/docs/http/ngx_http_split_clients_module.html
split_clients
返回一个字符串以供进一步使用。
但是现在,我需要返回包含一个变量的字符串,如下所示:
http
语境:
split_clients "${remote_addr}${http_user_agent}${date_gmt}" $my_variable {
20% https://example.com/fixed_string/another_fixed_string;
* https://example.com/$1/another_fixed_string;
}
server
语境:
location ~ ^/abc/(.*) {
rewrite ^/abc/(.*) $my_variable redirect;
}
当我访问时https://example.org/abc/something
,它会重定向到https://example.com/$1/another_fixed_string
,其中$1
URL 中是一个文字字符串。
我的期望是$1
充当变量,其值为something
,然后重定向到https://example.com/something/another_fixed_string
如何实现?
答案1
正如@Gerard H. Pille 所建议的,使用map
可以解决这个问题。
http
语境:
split_clients "${remote_addr}${http_user_agent}${date_gmt}" $my_variable {
20% 0;
* 1;
}
map $my_variable $my_url {
#default you can also set the default value
0 https://example.com/fixed_string/another_fixed_string;
1 https://example.com/$1/another_fixed_string;
}
server
语境:
location ~ ^/abc/(.*) {
rewrite ^/abc/(.*) $my_url redirect;
}