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