Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Переименование файлов при отдаче с хостинга
цитата
26/03/21 в 16:47
 EagleOwl
Задача такая - на сервере лежит папка с картинками, которую используют все домены (через альясы). В итоге имена картинок на всех доменах одинаковые (а также одинаковые пути). Можно ли как-то изменять имена для каждого домена?
Гугление никаких особых вариантов не дало.
Первое что в голову пришло - отдавать через php, но вариант так себе.

Если кто-то сталкивался с подобной задачей, то буду благодарен за подсказку хотя бы в какую сторону копать.
цитата
27/03/21 в 00:54
 TrueDevs
Цитата:
Гугление никаких особых вариантов не дало.


Очень странно icon_cool.gif

в location nginx можно использовать регулярные выражения, соотвественно делаешь что-то вроде:

Код:

location ~ ^/images/(a-zA-Z0-9)/(?<filename>.*)$ {
    alias /root/images/$filename;
}


на сайтах линки /images/porn/001.jpg, /images/sex/001.jpg будут вести в одно место. По аналогии можешь сделать с самим именем файла.
цитата
27/03/21 в 08:47
 xjam
если к директории картинок применяются другие директивы такие как location и то можно еще заюзать

rewrite ^/images/[^/]+/.*\.jpg$ /images/real/$1 last;

так как этот реврайт с ластом в конце не ломает try_files, а алиас может помешать остальным правилам

Последний раз редактировалось: xjam (27/03/21 в 09:03), всего редактировалось 1 раз
цитата
27/03/21 в 09:00
 xjam
Если нужно поменять названия файлов тоже, то из очевидных вариантов создать map с именами фейковых и реальных картинок, и реврайтить.
цитата
27/03/21 в 13:23
 EagleOwl
Мне собственно имена файлов менять и нужно. Картинок порядка 1 миллиона, потому записывать таблицы вида староеимя=новоеимя не вариант.
цитата
27/03/21 в 19:37
 TrueDevs



в nginx map так-же можно использовать regexp, так что не нужно миллион записей в ней делать, а всего лишь правила.
цитата
28/03/21 в 04:50
 TrueDevs
Чет не спалось и для проверки своих слов решил протестить)
Запросы

/images/sex-001.jpg
/images/porn-001.jpg
/images/fuck-001.jpg

Показывают файл images/001.jpg

Это вариант с мапами nginx

Исходя из этого можешь регекспами построить мапы под себя. smail54.gif

Код:

map $request_uri $real_image_name{
        "~^(\/images\/sex-(?<img>(.*)))$" $img;
        "~^(\/images\/porn-(?<img>(.*)))$" $img;
        "~^(\/images\/fuck-(?<img>(.*)))$" $img;

         default default.jpg;

}

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name  _;
    server_tokens off;

    location  ~ ^/images/(.*)\.jpg$ {
       alias /var/www/images/$real_image_name;
    }


}


Эта страница в полной версии