Задать вопрос
@Win32Sector

Как написать динамический location и try_files в конфиге NGINX?

Добрый день!

Есть куча статичных однотипных проектов, которые складываются в root директорию nginx в каталоги со случайными именами.

Например,

site.ru/ffdsf2425ff
site.ru/2435werw2f
site.ru/ffdsertwet3f
site.ru/ertw3ergeb

Конфиг Nginx выглядит сейчас следующим образом:

server {
    listen       80;
    server_name  localhost;
    location / {
        root /usr/share/nginx/html;
    }


В каждой директории сайта лежит index.html, который и отображается при входе по адресу site.ru/project_id

Но есть проблема: Если зайти, например, по адресу site.ru/project_id/sdfsdfsdfsdfdsf то я получу 404, а хотелось бы без изменения адресной строки отобразить так же index.html из каталога site.ru/project_id

Думаю, что нужно сделать что-то такое:

location ~ /(.*)/(.*) {
      try_files $uri $uri/ $1/index.html;
}


Но так не работает.
  • Вопрос задан
  • 1906 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
@mezhuev
Системный администратор
Вы почти нашли решение, только «/» в начале пропустили:
location ~ ^/([a-zA-Z0-9]*)/ {
    root /usr/share/nginx/html;
    try_files $uri $uri/ /$1/index.html;
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
трай файл вообще не нужно использовать
поскольку все коды должна отрабатывать CMS.
Если у вас apache+nginx
error_page 401 403 404 405 500 502 503 = @fallback;
        location @fallback {
                proxy_pass              http://127.0.0.1:82;
                proxy_set_header        Host            $host;
                proxy_set_header        X-Real-IP       $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                }

Если чисто nginx то там еще проще по аналогие сделайте.
За то, как отдавать ошибку, должен отвечать сам сайт, как минимум у всех cms есть сове офомление 404
Вы привели частный случай но на сайте может быть миллион тонкостей, и в любом раскладе их должна попытаться обработать cms
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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