Como extrair Apenas o nome do arquivo da solicitação uri

9

Estou tentando reescrever o pedido dependendo da extensão do arquivo, depois extraio apenas o nome do arquivo do uri e o armazeno em outra pasta. O problema aqui não é uma variável predefinida para o nome do arquivo e as variáveis disponíveis uri , request_uri e request_filename fornecerão o uri completo.

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;
       }
}

o melhor que posso fazer é obter a extensão .jpg ou .gif, quando coloco $1 no lugar de $request_filename da seguinte forma:

location @imgstore { 
    proxy_pass $file_folder$1;
}

Então, eu quero saber:

  1. Como obter o nome do arquivo da solicitação?
  2. É o caminho certo para armazenar imagens de uma pasta para outra?
por Johnta 20.04.2012 / 16:00

1 resposta

14

Você quer o nome do arquivo do pedido original ou do uri atual (após qualquer redirecionamento interno)? Ambos são possíveis usando o módulo de mapas :

# 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;
}

Depois é só usar $ request_basename ou $ basename onde você precisar deles. Observe que os mapas devem ser definidos no contexto http {}, tornando-os irmãos do servidor {} s.

    
por 20.04.2012 / 18:13