Comment extraire uniquement le nom de fichier de l'URI de demande

11

J'essaie de réécrire l'URI de la demande en fonction de l'extension du fichier, puis d'extraire uniquement le nom du fichier de l'URI et de le stocker dans un autre dossier. Le problème ici n'est pas une variable prédéfinie pour le nom de fichier et les variables disponibles uri, request_uriet request_filenamedonnera l'URI complet.

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

le mieux que je puisse faire est d'obtenir l'extension .jpg ou .gif, que lorsque je mets $1en place $request_filenamecomme ceci:

location @imgstore { 
    proxy_pass $file_folder$1;
}

Donc, je veux savoir:

  1. Comment obtenir le nom de fichier de la demande?
  2. Est-ce la bonne façon de stocker des images d'un dossier à un autre?
Johnta
la source

Réponses:

17

Voulez-vous le nom de fichier de la demande d'origine ou de l'URI actuel (après toute redirection interne)? Ils sont tous les deux possibles en utilisant le module de carte :

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

Ensuite, utilisez simplement $ request_basename ou $ basename où vous en avez besoin. Notez que les cartes doivent être définies dans le contexte http {}, ce qui en fait des frères et sœurs des serveurs {}.

kolbyjack
la source
Je veux le nom de fichier de l'URI actuel, je ne pense pas que le module de carte puisse donner cela mais je vais l'essayer,
Johnta
Je l'ai testé localement avant de poster, et cette deuxième carte fonctionne (tant que vous utilisez 0.9.6+)
kolbyjack
Merci Kolbyjack, super truc ça a fait le boulot, j'ai le nom du fichier et l'extension.
Johnta