проблема передачи в nginx get параметров

На самом деле это единственный раздел про unix на этом форуме

Модератор: /dev/random

Аватара пользователя
bars
Сообщения: 630
ОС: BSD/LINUX

проблема передачи в nginx get параметров

Сообщение bars »

Добрый день.
Подскажите пожалуйста как лучше сделать?
Есть ссылки вида:
https://local.local/files/products/tar.450x150.png?9eace201623ca22b1e385721c2d48f73
У них нужно обрезать get параметры ?9eace201623ca22b1e385721c2d48f73
https://local.local/files/products/tar.450x150.png
Если файла files/products/tar.450x150.png нет, то отработать ссылку с get параметром.
Вот что сделал в nginx

Код: Выделить всё

location ~ ^/files/products/(.+) {
if ($request_uri ~ "[A-fa-f0-9]{32}$") {
rewrite ^(.*)$ $uri? permanent;
}
        try_files $uri $uri/ /resize/resize.php?file=$1&token=$args;
}
Но почему то параметр get не корректно передается.

Код: Выделить всё

try_files $uri $uri/ /resize/resize.php?file=$1&token=$args;
При таком варианте, если нет файла то параметр get передается нормально.

Код: Выделить всё

location ~ ^/files/products/(.+) {
        try_files $uri $uri/ /resize/resize.php?file=$1&token=$args;
}
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19369
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: проблема передачи в nginx get параметров

Сообщение Bizdelnick »

Сохраните значение $1 в какую-нибудь переменную до следующего поиска совпадения по регулярке (которое в if).
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
bars
Сообщения: 630
ОС: BSD/LINUX

Re: проблема передачи в nginx get параметров

Сообщение bars »

Bizdelnick писал:
12.08.2020 12:11
Сохраните значение $1 в какую-нибудь переменную до следующего поиска совпадения по регулярке (которое в if).
Добавлю, при таком варианте происходит обрезка get параметров если файл существует.
Если файла нет, то должен произойти get запрос.

Код: Выделить всё

location ~ ^/files/products/(.+) {
if ($request_uri ~ "[A-fa-f0-9]{32}$") {
rewrite ^(.*)$ $uri? permanent;
}
        try_files $uri $uri/ /resize/resize.php?file=$1&token=$args;
}
При этом get запросе почему то названия файла файла не передается, передаешься только хеш.

Как я вижу этот локейшен.
Происходит запрос
https://local.local/files/products/tar.450x150.png?9eace201623ca22b1e385721c2d48f73
--> он попадет в локейшен для обработки /files/products/(.+) --> тут если файла нет то происходит get запрос try_files $uri $uri/ /resize/resize.php?file=$1&token=$args; --> если файл есть то происходит поиск по содержимому хэша (?9eace201623ca22b1e385721c2d48f73) из 32 символов, после в нем обрезается хэш и происходит 301 редирект на чистую ссылку на картинку без гет параметров.
https://local.local/files/products/tar.450x150.png
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19369
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: проблема передачи в nginx get параметров

Сообщение Bizdelnick »

bars писал:
12.08.2020 12:34
Добавлю
Не надо. Ответ был дан. Вам в нём что-то непонятно? Что именно?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
bars
Сообщения: 630
ОС: BSD/LINUX

Re: проблема передачи в nginx get параметров

Сообщение bars »

Bizdelnick писал:
12.08.2020 12:11
Сохраните значение $1 в какую-нибудь переменную до следующего поиска совпадения по регулярке (которое в if).
Для чего, что оно изменит?
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19369
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: проблема передачи в nginx get параметров

Сообщение Bizdelnick »

Оно изменит то, что имя файла будет сохранено в переменной, которая не переопределится позднее, как $1.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
bars
Сообщения: 630
ОС: BSD/LINUX

Re: проблема передачи в nginx get параметров

Сообщение bars »

Bizdelnick писал:
12.08.2020 13:10
Оно изменит то, что имя файла будет сохранено в переменной, которая не переопределится позднее, как $1.
Спасибо, получилось.
if переписывал переменную $1 в ресайзе.
Получилось так.

Код: Выделить всё

location ~ ^/files/products/(.+) {
        set $file_name_prod $1;
if ($request_uri ~ "[A-fa-f0-9]{32}$") {
        rewrite ^(.*)$ $uri? permanent;
}
        try_files $uri $uri/ /resize/resize.php?file=$file_name_prod&token=$args;
}
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали: