我正在尝试根据文件的扩展名重写请求uri,然后从uri中只提取文件名并将其存储在另一个文件夹中。 这里的问题是文件名没有预定义variables,可用的variablesuri , 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(内部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 {}上下文中定义,使其成为服务器的同级。