我们的域名看起来像xxx.dev.example.com和xxx.acc.example.com,其中xxx是网站的唯一标识符。子域中的{dev}或{acc}部分可以是 dev 或 acc 或 pro 或 sand 在DTAP中定义服务器。让我们称之为server_version。结果我们应该有
现在,我需要使用一个映射来标识server_version(dev,acc等)并设置一个变量。
如果尝试了几种方法,现在又无法使用完整的正则表达式。但是必须有一种更聪明/更好的方法来做到这一点。
我们尝试过:
map $host $AUTH_FLAG {
hostnames;
default "off";
*.dev.* "off";
*.acc.* "Restricted";
}
但这是不允许的,因为有多个通配符(从http://nginx.org/en/docs/http/ngx_http_map_module.html处获取)...由于子域有两个前缀,我们需要使用通配符。匹配的元素不是第一个子域标签,而是第二个(甚至可以在域名中的任何位置找到字符串都可以)
我尝试了
map $host $AUTH_FLAG {
hostnames;
default "off";
.dev. "off";
.acc. "Restricted";
}
这也不起作用。
因此,现在我可以使用以下方法进行工作。但是我敢肯定,必须有更好的方法来做到这一点。
map $host $ROOTLBL {
hostnames;
default "pro";
~*^.*\.dev\..* "dev";
~*^.*\.acc\..* "acc";
~*^.*\.pro\..* "pro";
}
问题:在多标签子域(例如xxx.yyy.example.com)中匹配标签的首选方法是什么?
帮助表示赞赏。真的很喜欢用正确的方式做