我们有一个多站点设置,需要将域和域/子文件夹映射到变量。这样编程就知道要加载哪个版本。
我们的商店具有单独的域,并且可以通过以下方式捕获:$http_host
还有domain.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;
}
When default
如果未在映射块中指定,则默认结果值为空字符串。所以,就你而言,无论价值如何$storecode
在第一个映射块中设置为,它在第二个映射块中被替换为空字符串。
由于地图变量在使用时进行评估,因此您无法设置$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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)