Jak uzyskać zmienne z lokalizacji w Nginx?

13

Lokalizacja z nginx conf:

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

Jak uzyskać zmienne z lokalizacji w Nginx?

satelity
źródło

Odpowiedzi:

17

Wyrażenie regularne działa prawie jak w każdym innym miejscu, które go posiada.

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

Pomocne mogą być również przykłady na wiki nginx, http://wiki.nginx.org/Configuration

Nexerus
źródło
12

Oprócz poprzednich odpowiedzi możesz także ustawić nazwy grup przechwyconych wyrażeń regularnych, aby łatwiej było je później odwoływać;

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

zobacz NGINX: sprawdź, czy $ remote_user jest równy pierwszej części lokalizacji na przykład użycia.

dawez
źródło
Jest to najwyraźniej konieczne, jeśli istnieje także inna zagnieżdżona lokalizacja z innymi grupami wyrażeń regularnych i przechwytywania wyrażeń regularnych. Ponieważ w tej innej lokalizacji $1 $2 $3itp. Będą odnosić się do wartości z zagnieżdżonego wyrażenia regularnego, zastępując $1 $2 ...wyrażenie zewnętrzne. An alias /$1w zewnętrznym wyrażeniu regularnym użyje wyrażenia $1z wewnętrznego wyrażenia regularnego, co prawdopodobnie spowoduje, że plik nie zostanie znaleziony.
KajMagnus
1
Myślę, że możesz po prostu pisać (?<width>\d+)zamiast (?<width>(\d+)), czy jest jakiś inny powód - być może również $1tak dobrze $width?
Cameron Kerr
2

Możesz spróbować:

location ~ ^/photos/resize/.+ {
    rewrite ^/photos/resize/(\d+)/(\d+) /my_resize_script.php?w=$1&h=$2 last;
}
niedźwiedź
źródło