На самом деле это единственный раздел про unix на этом форуме
Модераторы: /dev/random , Модераторы разделов
bars
Сообщения: 917
ОС: BSD/LINUX
Контактная информация:
Сообщение
bars » 12.08.2020 10:53
Добрый день.
Подскажите пожалуйста как лучше сделать?
Есть ссылки вида:
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;
}
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux
Сообщение
Bizdelnick » 12.08.2020 12:11
Сохраните значение $1 в какую-нибудь переменную до следующего поиска совпадения по регулярке (которое в if).
Пишите правильно:
в консоли
вк у́пе (с чем-либо)
в о бщем
воо бще в течение (часа)
новичо к
ню анс
по у молчанию приемле мо
проблем а
пробо вать
траф ик
bars
Сообщения: 917
ОС: BSD/LINUX
Контактная информация:
Сообщение
bars » 12.08.2020 12:34
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
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux
Сообщение
Bizdelnick » 12.08.2020 12:40
bars писал: ↑ 12.08.2020 12:34
Добавлю
Не надо. Ответ был дан. Вам в нём что-то непонятно? Что именно?
Пишите правильно:
в консоли
вк у́пе (с чем-либо)
в о бщем
воо бще в течение (часа)
новичо к
ню анс
по у молчанию приемле мо
проблем а
пробо вать
траф ик
bars
Сообщения: 917
ОС: BSD/LINUX
Контактная информация:
Сообщение
bars » 12.08.2020 12:44
Bizdelnick писал: ↑ 12.08.2020 12:11
Сохраните значение $1 в какую-нибудь переменную до следующего поиска совпадения по регулярке (которое в if).
Для чего, что оно изменит?
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux
Сообщение
Bizdelnick » 12.08.2020 13:10
Оно изменит то, что имя файла будет сохранено в переменной, которая не переопределится позднее, как $1.
Пишите правильно:
в консоли
вк у́пе (с чем-либо)
в о бщем
воо бще в течение (часа)
новичо к
ню анс
по у молчанию приемле мо
проблем а
пробо вать
траф ик
bars
Сообщения: 917
ОС: BSD/LINUX
Контактная информация:
Сообщение
bars » 12.08.2020 19:19
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;
}