nginx conf /with multiple maps) 到同一个变量
nginx conf /w multiple map(s) to same variable
我们有一个多站点设置,需要将域和 domains/subfolders 映射到一个变量。这样编程就知道要加载哪个版本。
我们的商店有单独的域,可以由 $http_host
捕获,也可以由域捕获。com/-string-locale-here- 由 $http_host$uri
和匹配命令捕获
不知何故,下面的方法不起作用。这可能是因为有两个映射命令,都映射到同一个变量 $storecode
或者可能出了什么问题?
map $http_host $storecode {
default dom_nl;
domain.com dom_nl;
domain.de dom_de;
store.com str_de;
}
map $http_host$uri $storecode {
~^store.com/en.* str_en;
~^store.com/fr.* str_fr;
}
当地图块中未指定default
时,默认结果值为空字符串。因此,在您的情况下,无论 $storecode
在第一个地图块中设置了什么值,它都会在第二个地图块中替换为空字符串。
由于map变量是在使用时计算的,所以不能在第二个map块中将$storecode
设置为默认值,因为那样会导致无限循环。
所以解决方案是在第一个map块中引入一个临时变量,然后在第二个块中将其用作默认值:
map $host $default_storecode {
default dom_nl;
domain.com dom_nl;
domain.de dom_de;
store.com str_de;
}
map $host$uri $storecode {
default $default_storecode;
~^store.com/en.* str_en;
~^store.com/fr.* str_fr;
}
或者,您可以将这两个地图块合并为一个:
map $host$uri $storecode {
default dom_nl;
~^domain.com.* dom_nl;
~^domain.de.* dom_de;
~^store.com/en.* str_en;
~^store.com/fr.* str_fr;
~^store.com.* str_de;
}
我们有一个多站点设置,需要将域和 domains/subfolders 映射到一个变量。这样编程就知道要加载哪个版本。
我们的商店有单独的域,可以由 $http_host
捕获,也可以由域捕获。com/-string-locale-here- 由 $http_host$uri
和匹配命令捕获
不知何故,下面的方法不起作用。这可能是因为有两个映射命令,都映射到同一个变量 $storecode
或者可能出了什么问题?
map $http_host $storecode {
default dom_nl;
domain.com dom_nl;
domain.de dom_de;
store.com str_de;
}
map $http_host$uri $storecode {
~^store.com/en.* str_en;
~^store.com/fr.* str_fr;
}
当地图块中未指定default
时,默认结果值为空字符串。因此,在您的情况下,无论 $storecode
在第一个地图块中设置了什么值,它都会在第二个地图块中替换为空字符串。
由于map变量是在使用时计算的,所以不能在第二个map块中将$storecode
设置为默认值,因为那样会导致无限循环。
所以解决方案是在第一个map块中引入一个临时变量,然后在第二个块中将其用作默认值:
map $host $default_storecode {
default dom_nl;
domain.com dom_nl;
domain.de dom_de;
store.com str_de;
}
map $host$uri $storecode {
default $default_storecode;
~^store.com/en.* str_en;
~^store.com/fr.* str_fr;
}
或者,您可以将这两个地图块合并为一个:
map $host$uri $storecode {
default dom_nl;
~^domain.com.* dom_nl;
~^domain.de.* dom_de;
~^store.com/en.* str_en;
~^store.com/fr.* str_fr;
~^store.com.* str_de;
}