如何从请求 uri 中提取文件名

如何从请求 uri 中提取文件名

我正在尝试根据文件的扩展名重写请求 uri,然后从 uri 中仅提取文件名并将其存储在另一个文件夹中。这里的问题是没有文件名的预定义变量和可用变量urirequest_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{} 上下文中定义映射,使它们成为 server{} 的兄弟。

相关内容