Я пытаюсь использовать это регулярное выражение, чтобы получить другой файл sitemap.xml для каждого хоста, без поддомена:
rewrite "([a-zA-Z\d-]+).([a-zA-Z\d-]+\.([a-z]{2,3}))\/sitemap.xml" /sitemaps/$2.xml;
Как вы можете видеть здесь https://regex101.com / r / WVQQ27 / 1 регулярное выражение работает, и 2-я группа захвата должна быть хостом без поддомена.
Но по какой-то причине я продолжаю получать 404. Есть идеи?
Технический фон таков, что у нас есть разные карты сайта для разных доменов, но и общий контент между ними, в зависимости от языка (языков) контента, обслуживаемого одним и тем же приложением.
if ($host ~* "([a-zA-Z\d-]+).([a-zA-Z\d-]+\.([a-z]{2,3}))") {
set $host_without_www $2;
rewrite /sitemap.xml /sitemaps/$host_without_www.xml;
}
Работает, но имейте в виду, что если
считается злом: 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;
}
}