Bagaimana cara saya mendapatkan variabel dari lokasi di nginx?

12

Lokasi dari nginx conf:

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

Bagaimana cara saya mendapatkan variabel dari lokasi di nginx?

satelit
sumber

Jawaban:

17

Regex berfungsi cukup seperti di setiap tempat lain yang memilikinya.

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

Melihat contoh-contoh pada nginx wiki juga dapat membantu, http://wiki.nginx.org/Configuration

Nexerus
sumber
11

Selain jawaban sebelumnya, Anda juga dapat mengatur nama grup yang diambil regex sehingga lebih mudah untuk dirujuk nanti;

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

lihat NGINX: periksa apakah $ remote_user sama dengan bagian pertama dari lokasi untuk contoh penggunaan.

dawez
sumber
Ini tampaknya perlu, jika ada juga lokasi bersarang dengan regex lain dan grup tangkapan regex lainnya. Karena di dalam lokasi lain itu, $1 $2 $3dll akan merujuk ke nilai-nilai dari regex bersarang, menimpa $1 $2 ...di regex luar. Sebuah alias /$1di regex luar , akan menggunakan $1dari regex dalam , yang kemungkinan menghasilkan file-tidak-ditemukan.
KajMagnus
1
Saya pikir Anda hanya dapat menulis (?<width>\d+)bukan (?<width>(\d+)), atau ada alasan lain untuk ini - mungkin juga mendapatkan $1serta $width?
Cameron Kerr
2

Anda dapat mencoba ini:

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