Рейтинг:0

Как перенаправить пользователя при прямом доступе к файлам изображений через браузер? [nginx]

флаг cn

Как перенаправить, если пользователь пытается получить прямой доступ к файлам изображений только в браузере? Я хочу сохранить возможность вставлять изображения с помощью <img src="...">. Как перенаправить с

https://img.example.com/c/600x1200_90_webp/img-master/img/2022/01/03/08/04/54/95259215_p0_master1200.jpg

к

https://example.com/detail?id=95259215

Это моя конфиг nginx

location ~ "^/c/600x1200_90_webp/img-master/img/\d+/\d+/\d+/\d+/\d+/\d+/(?<имя файла>.+\.(jpg|png|webp)) $" {
    вернуть 301 https://example.com/detail?id=$filename;
}

Код не работает, потому что он собирается https://example.com/detail?id=95259215_p0_master1200.jpg но мне нужно обрезать строку после последней цифры имени файла, поэтому в этом случае обрезать _p0_master1200.jpg. Я также не знаю, как это сделать, если пользователь обращается к нему через браузер.

Рейтинг:0
флаг us

Ваше регулярное выражение (?<имя файла>.+\.(jpg|png|webp))$ записывает полное имя файла в переменную имени файла. Чтобы извлечь только часть перед _ к переменной, используйте вместо этого следующее:

(?<имя файла>[0-9]+).+(?:jpg|png|webp)$

Это соответствует только числам для имя файла переменная (я бы назвал это image_id чтобы быть более описательным). https://regexr.com хороший инструмент для работы с регулярными выражениями.

Для ограничения отображения только браузерами вам необходимо использовать Модуль реферера nginx http.

Эти два вместе, конфигурация будет выглядеть так:

location ~ "^/c/600x1200_90_webp/img-master/img/\d+/\d+/\d+/\d+/\d+/\d+/(?<filename>[0-9]+).+(?: jpg|png|webp)$" {
    действительные_рефереры имена_серверов;
    если ($invalid_referer = "0") {
        вернуть 301 https://example.com/detail?id=$filename;
    }
}

nginx проверит значение HTTP Referer. Если он содержит имя, указанное в имя сервера поле, он отправит перенаправление. Поле referer устанавливается браузером, когда он загружает ресурсы для веб-страницы.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.