Регулярное выражение Nginx не работает

Я пытаюсь использовать это регулярное выражение, чтобы получить другой файл 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. Есть идеи?

Технический фон таков, что у нас есть разные карты сайта для разных доменов, но и общий контент между ними, в зависимости от языка (языков) контента, обслуживаемого одним и тем же приложением.

0
задан 5 July 2017 в 12:12
2 ответа
  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/

Однако в данном случае это работает для нас, но если кто-то знает, как это сделать лучше, я готов его улучшить.

0
ответ дан 5 December 2019 в 07:51
map $host $domain {
  ~(?<cap>[^.]+\.[^.]+)$ $cap;
}

server {
  location = /sitemap.xml {
    try_files /sitemaps/$domain.xml =404;
  }
}
0
ответ дан 5 December 2019 в 07:51

Теги

Похожие вопросы