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

我正在尝试根据文件的扩展名重写请求uri,然后从uri中只提取文件名并将其存储在另一个文件夹中。 这里的问题是文件名没有预定义variables,可用的variablesurirequest_urirequest_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(内部redirect后)的文件名? 他们都可以使用地图模块 :

 # 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 {}上下文中定义,使其成为服务器的同级。