Назад | Перейти на главную страницу

Как извлечь только имя файла из uri запроса

Я пытаюсь переписать URI запроса в зависимости от расширения файла, затем извлечь только имя файла из URI и сохранить его в другой папке. Проблема здесь в отсутствии предопределенной переменной для имени файла и доступных переменных. uri, request_uri и request_filename даст полный uri.

server{

        set $file_folder D:/nginx-1.0.15/imageAll/;  

        location ~*+.(gif|jpg)$ { 
            try_files $uri @imgstore;
        }

        location @imgstore { 
            proxy_pass $file_folder$request_filename;
            proxy_store on;
            proxy_temp_path /nginx-1.0.15/images/;
            proxy_store_access  user:rw  group:rw  all:r;
       }
}

лучшее, что я могу сделать, это получить расширение .jpg или .gif, которое, когда я помещаю $1 на месте $request_filename как это:

location @imgstore { 
    proxy_pass $file_folder$1;
}

Итак, я хочу знать:

  1. Как получить имя файла из запроса?
  2. Это правильный способ хранить изображения из папки в другой?

Вам нужно имя файла из исходного запроса или из текущего uri (после любого внутреннего перенаправления)? Они оба могут использовать модуль карты:

# Gets the basename of the original request
map $request_uri $request_basename {
    ~/(?<captured_request_basename>[^/?]*)(?:\?|$) $captured_request_basename;
}

# Gets the basename of the current uri
map $uri $basename {
    ~/(?<captured_basename>[^/]*)$ $captured_basename;
}

Затем просто используйте $ request_basename или $ basename везде, где они вам нужны. Обратите внимание, что карты должны быть определены в контексте http {}, что делает их родственниками server {} s.