Comment obtenir des variables de l'emplacement dans nginx?

12

L'emplacement de nginx conf:

location ~/photos/resize/(\d+)/(\d+) {
    # Here var1=(\d+), var2=(\d+)
}

Comment obtenir des variables de l'emplacement dans nginx?

satels
la source

Réponses:

17

Le regex fonctionne à peu près comme dans tous les autres endroits qui l'ont.

location ~/photos/resize/(\d+)/(\d+) {
  # use $1 for the first \d+ and $2 for the second, and so on.
}

La consultation d'exemples sur le wiki nginx peut également aider, http://wiki.nginx.org/Configuration

Nexerus
la source
11

En plus des réponses précédentes, vous pouvez également définir les noms des groupes de regex capturés afin qu'ils soient plus facilement référencés plus tard;

location ~/photos/resize/(?<width>(\d+))/(?<height>(\d+)) {
  # so here you can use the $width and the $height variables
}

voir NGINX: vérifiez si $ remote_user est égal à la première partie de l'emplacement pour un exemple d'utilisation.

dawez
la source
Cela est apparemment nécessaire, s'il existe également un autre emplacement imbriqué avec un autre regex et des groupes de capture regex. Parce qu'à l'intérieur de cet autre emplacement, $1 $2 $3etc fera référence aux valeurs de l'expression régulière imbriquée, écrasant la $1 $2 ...dans l'expression régulière externe. Un alias /$1dans la regex externe , utilisera le $1de la regex interne , ce qui se traduit probablement par un fichier introuvable.
KajMagnus
1
Je pense que vous pouvez simplement écrire à la (?<width>\d+)place de (?<width>(\d+)), ou y a-t-il une autre raison à cela - peut-être aussi $1aussi $width?
Cameron Kerr
2

Vous pouvez essayer ceci:

location ~ ^/photos/resize/.+ {
    rewrite ^/photos/resize/(\d+)/(\d+) /my_resize_script.php?w=$1&h=$2 last;
}
bearcat
la source