So extrahieren Sie nur den Dateinamen aus der Anforderungs-URL

11

Ich versuche, die Anforderungs-URL abhängig von der Dateierweiterung neu zu schreiben, extrahiere dann nur den Dateinamen aus der URL und speichere sie in einem anderen Ordner. Das Problem hier ist keine vordefinierte Variable für den Dateinamen und den verfügbaren Variablen uri, request_uriund request_filenamedie volle uri geben.

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

Das Beste, was ich tun kann, ist, die Erweiterung .jpg oder .gif zu bekommen, die ich $1anstelle von $request_filename:.

location @imgstore { 
    proxy_pass $file_folder$1;
}

Also möchte ich wissen:

  1. Wie erhalte ich den Dateinamen aus der Anfrage?
  2. Ist es der richtige Weg, Bilder von einem Ordner in einen anderen zu speichern?
Johnta
quelle

Antworten:

17

Möchten Sie den Dateinamen von der ursprünglichen Anforderung oder von der aktuellen URL (nach einer internen Umleitung)? Sie sind beide mit dem Kartenmodul möglich :

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

Verwenden Sie dann einfach $ request_basename oder $ basename, wo immer Sie sie benötigen. Beachten Sie, dass Maps im http {} -Kontext definiert werden müssen, damit sie Geschwister von Servern {} sind.

Kolbyjack
quelle
Ich möchte den Dateinamen von der aktuellen URL, ich glaube nicht, dass das Kartenmodul das geben könnte, aber ich werde es versuchen,
Johnta
Ich habe es vor dem Posten lokal getestet und diese zweite Karte funktioniert (solange Sie 0.9.6+ verwenden)
Kolbyjack
Danke Kolbyjack, toller Trick, es hat den Job gemacht, ich habe den Dateinamen und die Erweiterung bekommen.
Johnta