Nginx的正则expression式不工作

我试图使用这个正则expression式来获得每个主机不同的sitemap.xml,没有子域:

rewrite "([a-zA-Z\d-]+).([a-zA-Z\d-]+\.([az]{2,3}))\/sitemap.xml" /sitemaps/$2.xml; 

正如你可以在这里看到https://regex101.com/r/WVQQ27/1正则expression式工作和第二捕获组应该是没有子域的主机。

但由于某种原因,我一直得到404。任何想法?

技术背景是,我们针对不同的域名拥有不同的站点地图,但也根据同一应用程序提供的内容的语言来共享内容。

  if ($host ~* "([a-zA-Z\d-]+).([a-zA-Z\d-]+\.([az]{2,3}))") { set $host_without_www $2; rewrite /sitemap.xml /sitemaps/$host_without_www.xml; } 

工作,但请注意, if被认为是邪恶的: https : //www.nginx.com/resources/wiki/start/topics/depth/ifisevil/

然而,在这种情况下,它适用于我们,但如果有人知道更好的方式来做到这一点,我愿意改善它。

 map $host $domain { ~(?<cap>[^.]+\.[^.]+)$ $cap; } server { location = /sitemap.xml { try_files /sitemaps/$domain.xml =404; } }