Làm cách nào để tôi nhận được các biến từ vị trí trong nginx?


12

Vị trí từ nginx conf:

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

Làm cách nào để tôi nhận được các biến từ vị trí trong nginx?

Câu trả lời:


17

Regex hoạt động khá giống như ở mọi nơi khác có nó.

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

Nhìn vào các ví dụ trên wiki nginx cũng có thể giúp ích, http://wiki.nginx.org/Configuration


11

Ngoài các câu trả lời trước đó, bạn cũng có thể đặt tên của các nhóm regex bị bắt để chúng dễ dàng được giới thiệu sau này;

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

xem NGINX: kiểm tra xem $ remote_user có bằng với phần đầu tiên của vị trí để biết ví dụ về việc sử dụng hay không.


Điều này rõ ràng là cần thiết, nếu còn có một vị trí lồng nhau khác với các nhóm bắt regex và regex khác. Bởi vì bên trong vị trí khác, $1 $2 $3v.v. sẽ đề cập đến các giá trị từ regex lồng nhau, ghi đè lên $1 $2 ...regex bên ngoài. Một alias /$1trong regex bên ngoài , sẽ sử dụng $1từ regex bên trong , có khả năng dẫn đến không tìm thấy tệp.
KajMagnus

1
Tôi nghĩ rằng bạn chỉ có thể viết (?<width>\d+)thay vì (?<width>(\d+)), hoặc có một số lý do khác cho việc này - có lẽ để có được $1cũng như $width?
Cameron Kerr

2

Bạn có thể thử điều này:

location ~ ^/photos/resize/.+ {
    rewrite ^/photos/resize/(\d+)/(\d+) /my_resize_script.php?w=$1&h=$2 last;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.