Master-X
Регистрация
|
Вход
Форум
|
Новости
|
Статьи
Главная
»
Форум
»
Программинг, Скрипты, Софт, Сервисы
»
Тема:
Переименование файлов при отдаче с хостинга
Новая тема
Ответить
цитата
26/03/21 в 16:47
EagleOwl
Задача такая - на сервере лежит папка с картинками, которую используют все домены (через альясы). В итоге имена картинок на всех доменах одинаковые (а также одинаковые пути). Можно ли как-то изменять имена для каждого домена?
Гугление никаких особых вариантов не дало.
Первое что в голову пришло - отдавать через php, но вариант так себе.
Если кто-то сталкивался с подобной задачей, то буду благодарен за подсказку хотя бы в какую сторону копать.
цитата
27/03/21 в 00:54
TrueDevs
Цитата:
Гугление никаких особых вариантов не дало.
Очень странно
в 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
Исходя из этого можешь регекспами построить мапы под себя.
Код:
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;
}
}
Новая тема
Ответить
Эта страница в полной версии