Come estrarre solo il nome del file dall'uri di richiesta


11

Sto cercando di riscrivere l'uri richiesta in base all'estensione del file, quindi estrarre solo il nome del file dall'uri e memorizzarlo in un'altra cartella. Il problema qui non è predefinito variabile per il nome del file e le variabili disponibili uri, request_urie request_filenamedarà il pieno 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;
       }
}

il meglio che posso fare è ottenere l'estensione .jpg o .gif, che quando inserisco $1in $request_filenamequesto modo:

location @imgstore { 
    proxy_pass $file_folder$1;
}

Quindi, voglio sapere:

  1. Come ottenere il nome del file dalla richiesta?
  2. È il modo giusto per memorizzare le immagini dalla cartella a un'altra?

Risposte:


17

Desideri il nome file dalla richiesta originale o dall'uri corrente (dopo qualsiasi reindirizzamento interno)? Entrambi sono possibili utilizzando il modulo mappa :

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

Quindi usa $ request_basename o $ basename ovunque tu ne abbia bisogno. Nota che le mappe devono essere definite nel contesto http {}, rendendole fratelli dei server {}.


Voglio il nome del file dall'uri corrente, non credo che il modulo della mappa potrebbe darlo ma lo proverò,
Johnta,

L'ho testato localmente prima di pubblicare e quella seconda mappa funziona (a patto che tu stia usando 0.9.6+)
kolbyjack

Grazie Kolbyjack, grande trucco ha fatto il lavoro, ho ottenuto il nome del file e l'estensione.
Johnta,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.