Как извлечь только имя файла из запроса 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. Это правильный способ хранения изображений из папки в другую?

1 ответ

Решение

Хотите ли вы имя файла из исходного запроса или из текущего 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{}, что делает их родственниками серверов {}.

Другие вопросы по тегам