เพื่อให้แน่ใจว่าการจับคู่ testdir ถูกเลือกแทนการจับคู่ jpg / txt ให้ใช้ตำแหน่งต่อไปนี้:
location ^~ /testdir {
deny all;
return 404;
}
location ~* ^.+\.(jpg|txt)$ {
root /var/www/site;
}
ในตัวอย่างของคุณคุณมีสถานที่สองประเภท location /testdir
เป็นที่ตั้งคำนำหน้าเป็นมันไม่มีตัวหนอน ( ~
) ระหว่างและlocation
/testdir
location ~* ^.+\.(jpg|txt)$
คือตำแหน่ง regex (อันที่เล็กกว่าแบบตัวพิมพ์เล็ก - ใหญ่เนื่องจากตัวอักษร*
ตรงหลังตัวหนอน) จากเอกสาร nginx :
ในการค้นหาตำแหน่งที่ตรงกับคำขอที่ได้รับ nginx ก่อนตรวจสอบสถานที่ที่กำหนดโดยใช้สตริงคำนำหน้า (ตำแหน่งคำนำหน้า) ในหมู่พวกเขาสถานที่ที่มีคำนำหน้าการจับคู่ที่ยาวที่สุดจะถูกเลือกและจดจำ จากนั้นตรวจสอบนิพจน์ทั่วไปตามลำดับที่ปรากฏในไฟล์กำหนดค่า การค้นหานิพจน์ทั่วไปสิ้นสุดลงในการแข่งขันนัดแรกและใช้การกำหนดค่าที่เกี่ยวข้อง หากไม่พบการจับคู่กับนิพจน์ทั่วไปการกำหนดค่าของตำแหน่งคำนำหน้าที่จดจำไว้ก่อนหน้านี้จะถูกใช้
ปัญหาที่นี่คือที่ตั้งของ testdir ของคุณกำลังถูกจดจำ แต่จากนั้นเลือกตำแหน่ง jpg / txt ในระหว่างขั้นตอน regex ตามที่ตรงกัน หมายเหตุจากเอกสารประกอบต่อไปนี้คือสิ่งที่ฉันใช้ตามแนวทางแก้ไขปัญหาของฉัน (ที่ระบุด้านบน) เมื่อ:
หากตำแหน่งคำนำหน้าการจับคู่ที่ยาวที่สุดมีตัวปรับ“ ^ ~” การแสดงออกปกติจะไม่ถูกตรวจสอบ