Я пытаюсь переписать 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;
}
Итак, я хочу знать:
Вам нужно имя файла из исходного запроса или из текущего 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.