Рейтинг:0

Nginx: переписать файл из каталога в корень

флаг um

У меня есть сервер nginx, работающий в среде Linux, и он обрабатывает домены. www.example1.com и www.example2.com. каждый домен имеет свою собственную карту сайта, поэтому мне нужна правильная карта сайта, загруженная для каждого домена, поскольку она находится в корневом каталоге, например:

www.example1.com/sitemap.xml на самом деле загружается из www.example1.com/sitemaps/1/sitemap.xml

И:

www.example2.com/sitemap.xml на самом деле загружается из www.example2.com/sitemaps/2/sitemap.xml

Чтобы добиться этого, я попытался присвоить значение для каждого домена и переписать его на основе значения переменной, как показано ниже:

в nginx.conf:

карта $ http_host $ домен {
    www.example1.com 1;
    www.example2.com 2;
}

И в sitemap.conf:

если ($ домен = 1) {
  переписать sitemaps/1/sitemap(.*)$ /sitemap в последнюю очередь;
}
если ($ домен = 2) {
  переписать sitemaps/2/sitemap(.*)$ /sitemap в последнюю очередь;
}

Но по какой-то причине эта конфигурация возвращает 404.

Любой совет?

флаг sv
`sitemap.conf` можно упростить, например, `переписать файлы sitemap/$domain/sitemap(.*)$ /sitemap последними`. Однако это не предотвращает 404. 404, вероятно, был вызван другими причинами (чем фрагменты, опубликованные в OP). Пожалуйста, поделитесь полной конфигурацией для устранения неполадок.
Рейтинг:2
флаг gr

Я не вижу вашего полного конфига и не знаю, как и где вы это включаете карта сайта.conf файл, но я бы предпочел сделать это совершенно по-другому. С вашим существующим карта Блок это будет выглядеть

местоположение = /sitemap.xml {
    # использовать переменную '$domain' как часть полного пути к файлу 'sitemap.xml'
    корень /var/www/domain/sitemaps/$domain; # здесь нет косой черты!
}

или даже получить полный путь к /карты сайта/Н/ папка с карта директива как

карта $http_host $sitemap_path {
    www.example1.com/var/www/example1.com/sitemaps/1;
    www.example2.com/var/www/example1.com/sitemaps/2;
}

и

местоположение = /sitemap.xml {
    # использовать переменную '$sitemap_path' как полный путь к файлу 'sitemap.xml'
    корень $sitemap_path; # здесь нет косой черты!
}

Если вы все еще хотите использовать переписать директива для этой задачи, вы используете ее неправильно. Вы можете попробовать это:

если ($домен=1) {
    переписать ^/sitemap\.xml$ /sitemaps/1/sitemap.xml последним;
}
если ($домен=2) {
    переписать ^/sitemap\.xml$ /sitemaps/2/sitemap.xml последним;
}

или даже более оптимизированный:

если ($ домен) {
    переписать ^/sitemap\.xml$ /sitemaps/$domain/sitemap.xml последним;
}
Eng7 avatar
флаг um
Полные конфиги будут сбивать с толку, поэтому я добавил только соответствующую часть конфига.
Eng7 avatar
флаг um
У меня сработало изменение корневого каталога для местоположения sitemap.xml. Что касается перезаписи, для чего используется «последний»?
Ivan Shatsky avatar
флаг gr
Вы можете рассматривать это как копирование-вставку из вашего исходного конфига.Как правило, флаг `last` означает, что вся обработка URI должна выполняться снова, но на этот раз для измененного значения `$uri`.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.