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?

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


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.


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;
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.