Nginx редирект без get параметров.

baas
На сайте с 17.09.2012
Offline
164
839

Добрый день.

Подскажите пожалуйста по структуре редиректа.

При запросе к директориям /files/products и /files/content с GET-параметром(-ами) и при существовании файла - 301 редирект на основной url без GET-параметров (нужно удалить все GET-параметры из URL картинок из указанных папок).

Уточнение если файла не существует, то запрос перенаправляется на php-скрипт как и сейчас (try_files $uri $uri/ /resize/resize.php?file=$1&token=$args;) вне зависимости от наличия/отсутствия GET-параметров в запросе. 

Имеется

https://local.local/files/products/paal.320x504.png?bca30a33g344y444w5577
должен сработать 301й редирект на
https://local.local/files/products/paal.320x504.png

И

https://local.local/files/content/park.520x504.jpg?d1a50s14hfdj19dv51с2 
должен сработать 301й редирект на
https://local.local/files/content/park.520x504.jpg

В nginx есть пару проверок по этому поводу.

location ~ ^/files/products/(.+) {
        try_files $uri $uri/ /resize/resize.php?file=$1&token=$args;
}
location ~ ^/files/content/(.+) {
        try_files $uri $uri/ /resize/resize_uploaded.php?file=$1&token=$args;
}

Как лучше реализовать такое?

Настройка BSD систем. (https://www.fryaha.ru) Знание сила, незнание Рабочая сила!
baas
На сайте с 17.09.2012
Offline
164
#1

Получилось на половину.

location ~ ^/files/products/(.+) {
if ($query_string ~ "^[A-fa-f0-9]{32}$") {
        rewrite ^(.*)$ $uri? permanent;
}
        try_files $uri $uri/ /resize/resize.php?file=$1&token=$args;
}

location ~ ^/files/content/(.+) {
if ($query_string ~ "^[A-fa-f0-9]{32}$") {
        rewrite ^(.*)$ $uri? permanent;
}
        try_files $uri $uri/ /resize/resize_uploaded.php?file=$1&token=$args;
}

Но при это как-то криво проходит try_files $uri $uri/ /resize/resize.php?file=$1&token=$args;

Не работает ресайз для файлов которых нет. 

Andreyka
На сайте с 19.02.2005
Offline
822
#2
map $request_uri $request_uri_path {
    "~^(?P<path>[^?]*)(\?.*)?$" $path;
}

Через map проще всего

Не стоит плодить сущности без необходимости
baas
На сайте с 17.09.2012
Offline
164
#3
Andreyka #:

Через map проще всего

Не понял. 

baas
На сайте с 17.09.2012
Offline
164
#4
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;
} 
Andreyka
На сайте с 19.02.2005
Offline
822
#5
Модуль ngx_http_map_module
  • nginx.org
Модуль создаёт переменные, значения которых зависят от значений других переменных. Пример конфигурации Директивы Создаёт новую переменную, значение которой зависит от значений одной или более исходных переменных, указанных в первом параметре. До версии 0.9.0 в качестве первого параметра можно было указать только одну переменную. Поскольку...

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий