firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.

Как перезаписать имя файла во вложенную папку для Nginx?

Есть следующая структура папок

/uploads/2/7/72.jpg -> test.com/uploads/72.jpg
/uploads/3/7/73.jpg -> test.com/uploads/73.jpg
/uploads/4/7/74.jpg -> test.com/uploads/74.jpg
....

сделал локайшен

location /uploads/ {
root v:/test/wwwroot;

# rewrite ^/uploads\/([0-9]*)([0-9])([0-9]).(jpe?g|png|gif|webm|bmp|tiff)$ $uri/$3/$2/$1$2$3.$4 break;
try_files $uri $uri/$3/$2/$1$2$3.$4;
}

И к сожалению не работает, варианты попробовал практически все. Как правильно описать данный шаблон

2019/10/08 08:22:30 [error] 30528#26804: *63 rewrite or internal redirection cycle while internally redirecting to "/uploads/72.jpg///.///.///.///.///.///.///.///.///.///.///.", client: 127.0.0.1, server: img.test.com, request: "GET /uploads/72.jpg HTTP/1.1", host: "img.test.com"
  • Вопрос задан
  • 628 просмотров
Решения вопроса 1
firedragon
@firedragon Автор вопроса
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Основная идея была хранить файлы во вложенных папках и иметь короткие имена.
Раскладывает по папкам бэкенд, в качестве ключа используется последняя и предпоследняя цифра идентификатора в базе.

uploads\2\4\242.jpg -> img.localhost/242.jpg
uploads\3\4\243.jpg -> img.localhost/243.jpg

Причина в том что бы в папке не было кучи файлов после аплоада.

##########################
server {
    listen 80;
    listen [::]:80;
    server_name img.localhost;
    charset utf-8;
    

    #   Расположение логов
    access_log  logs/img_localhost_access.log combined;
    error_log   logs/img_localhost_error.log;

    location / {
      try_files $uri $uri/ @upfiles;
      limit_except GET {
          deny all;
      }
      expires max;
    }
    location @upfiles {
                root v:/project/localhost/localhost/wwwroot/uploads;
                rewrite ^(/)([0-9]+)([0-9])([0-9])(.jpe?g|.png|.gif|.webm|.bmp|.tiff)$ /$4/$3/$2$3$4$5 last;
	}



    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы