我想将任何方案中的所有这些子域转发到 https 中的相应主域。我不想有几个服务器指令。
server {
server_name *.autocosts.info
*.autocouts.info
*.autocostos.info
*.autocosti.info
*.autocustos.info
*.autocosturi.info
*.autokoszty.info;
listen 80;
listen 404;
listen 443 ssl;
return 301 https://$host$request_uri;
}
这似乎不起作用。是否$host
包含子域?我怎样才能得到主域(没有子域)?
我知道我可以使用主域server_name ~^(www\.)?(?<domain>.+)$;
,但它不限于上述域列表。
正则表达式来救援!
^(\*\.)?([a-z\d][a-z\d-]*[a-z\d]\.)(?<maindomain>auto[a-z\d-]*[a-z\d]\.info)+$
^(\*\.)?([a-z\d][a-z\d-]*[a-z\d]\.)
匹配子域。?<maindomain>
将裸域存储在一个名为$maindomain
auto
匹配您所有域中存在的“自动”。[a-z\d-]*[a-z\d]\
匹配您域的其余部分\.info+
匹配您域的 .info 部分(在 nginx 中未经测试,但应该作为正则表达式工作)。
使用的文档:来自 nginx.org 网站
因此,让我们修复您的服务器块:
访问该站点时会产生以下结果:
curl -I oi3j2.autocostos.info