这是此问题的更新版本。 (我从来没有问过这里的问题,所以我不能对原文发表评论)
Variable interpolation inside Map directive
根据文档,现在允许使用字符串和变量的组合。如下所示:http://nginx.org/en/docs/http/ngx_http_map_module.html#map
在这里:https://trac.nginx.org/nginx/ticket/663
结果值可以包含文本,变量(0.9.0)及其组合(1.11.0)。
但是我仍然无法让它发挥作用。
我们有大量的重定向,根据以下建议,我尝试使用map指令实现它们。 https://serverfault.com/questions/450325/nginx-and-try-files-try-named-location-with-rewrites-before-fallback
以下是一个示例映射:
map $uri $redirect {
/wrong/path /right/path/;
~^/another/wrong/path/(?<path>.*)$ /another/right/path/$path;
}
这将返回文字字符串/another/right/path/$path
这很好用:
map $uri $redirect {
/wrong/path /right/path/;
~^/another/wrong/path/(?<path>.*)$ $path
}
所以我知道变量不是问题所在。
有没有人知道如何在map指令中将字符串与变量结合起来?我在这里缺少什么?
我的版本是1.11.2
答案 0 :(得分:0)
您可以将字符串组合为以下示例。
map $host $_env_right_url {
default right-path.com;
}
map $uri $redirect_uri {
~^/wrong/path/?$ https://$_env_right_url/rightPath;
~^/second/wrong/path/?$ https://$_env_right_url/second/rightPath;
}
server {
listen 80;
server_name WRONG-path.com;
location / {
try_files $uri $uri/ @redirect-map;
}
location @redirect-map {
if ($redirect_uri) { # redirect if the variable is defined
return 301 $redirect_uri;
}
}
}