ฉันจะรับตัวแปรจากตำแหน่งใน nginx ได้อย่างไร


13

ตำแหน่งจาก nginx conf:

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

ฉันจะรับตัวแปรจากตำแหน่งใน nginx ได้อย่างไร

คำตอบ:


17

regex ใช้งานได้ดีเหมือนในทุก ๆ ที่ที่มี

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

การดูตัวอย่างบน nginx wiki อาจช่วยได้เช่นกันhttp://wiki.nginx.org/Configuration


12

นอกเหนือจากคำตอบก่อนหน้านี้คุณยังสามารถตั้งชื่อของกลุ่ม regex ที่จับได้เพื่อให้สามารถเรียกได้ง่ายขึ้นในภายหลัง

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

ดูNGINX: ตรวจสอบว่า $ remote_user เท่ากับส่วนแรกของตำแหน่งสำหรับตัวอย่างการใช้งานหรือไม่


เห็นได้ชัดว่ามีความจำเป็นถ้ามีตำแหน่งซ้อนกันอีกกลุ่มหนึ่งที่มีกลุ่มการจับ regex และ regex อื่น เนื่องจากภายในตำแหน่ง$1 $2 $3อื่นเป็นต้นจะอ้างอิงค่าจาก nex regex ที่ซ้อนทับเขียนทับ$1 $2 ...ใน regex ภายนอก alias /$1ในด้านนอก regex จะใช้$1จากภายใน regex ซึ่งผลลัพธ์ที่มีแนวโน้มในแฟ้มที่ไม่พบ
KajMagnus

1
ฉันคิดว่าคุณสามารถเขียน(?<width>\d+)แทน(?<width>(\d+))หรือมีเหตุผลอื่นสำหรับเรื่องนี้ - อาจจะได้รับ$1เช่นกัน$width?
คาเมรอนเคอร์

2

คุณสามารถลองสิ่งนี้:

location ~ ^/photos/resize/.+ {
    rewrite ^/photos/resize/(\d+)/(\d+) /my_resize_script.php?w=$1&h=$2 last;
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.