Ваша текущая конфигурация Nginx пытается найти файл `sitemap.xml` как физический файл в файловой системе, и когда не находит, перенаправляет запрос на `index.php`, добавляя закрывающий слэш.
Проблема в том, что когда вы указываете `try_files $uri $uri/ /index.php$is_args$args;`, Nginx сначала проверяет наличие физического файла по пути `$uri`, затем ищет директорию `$uri/`, и, если ни то, ни другое не найдено, перенаправляет запрос на `index.php`.
Чтобы обрабатывать `sitemap.xml` через PHP, необходимо правильно настроить блок `location`. В вашем случае можно использовать прямое сравнение для `sitemap.xml`, чтобы обработать его через PHP, не добавляя слэша. Пример правильной конфигурации:
```nginx
location = /sitemap.xml {
try_files $uri @php;
}
location / {
try_files $uri $uri/ /index.php$is_args$args;
location ~ [^/]\.ph(p\d*|tml)$ {
try_files /does_not_exists @php;
}
}
location @php {
fastcgi_index index.php;
fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f info@xxx-xxx.domen";
fastcgi_pass unix:/var/www/php-fpm/1.sock;
fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
try_files $uri =404;
include fastcgi_params;
}
```
В этой конфигурации, когда запрос идет на `/sitemap.xml`, Nginx проверяет, существует ли этот файл (что не должно быть, так как он генерируется PHP), и если нет, передает запрос на `@php`. Это должно позволить обрабатывать `sitemap.xml` через PHP без добавления закрывающего слэша.
Он добавляет закрывающий слэш ко всему кроме найденных файлов физически, остальное переадресует на index.php. Я так понимаю за это отвечает данный кусок:
и при попытке обратиться к /sitemap.xml, который генерируется скриптом php никсы не находят этого файла и добавляют /sitemap.xml/
Попытка дописать location и так: И так:
Не помогает. Подскажите где ошибаюсь и как правильно?