ฉันมีการกำหนดค่าต่อไปนี้ภายใน nginx เซิร์ฟเวอร์ {...}
บล็อก:
ที่ตั้ง /someapp {
ถ้า ( $https != "เปิด" ) {
ส่งคืน 301 https://$server_name$request_uri;
}
ตำแหน่ง ~ \.php$ {
รวมตัวอย่าง/fastcgi-php.conf;
fastcgi_pass ยูนิกซ์:/var/run/php/php-fpm.sock;
}
}
ปัญหาคือ:
- เมื่อฉันเข้าถึง
http://example.com/someapp/somefile.html
(หรือแค่ /someapp
) ฉันถูกเปลี่ยนเส้นทางไปที่ HTTPS
- แต่เมื่อฉันเข้าถึง
http://example.com/someapp/somefile.php
ฉันไม่ได้เปลี่ยนเส้นทางไปยัง HTTPS
โดยวิธีการนี้สอดคล้องกับ เอกสารที่พูดว่า:
หากต้องการค้นหาตำแหน่งที่ตรงกับคำขอที่กำหนด ก่อนอื่น nginx จะตรวจสอบตำแหน่งที่กำหนดโดยใช้สตริงคำนำหน้า (ตำแหน่งคำนำหน้า) ในหมู่พวกเขา สถานที่ที่มีคำนำหน้าตรงกันยาวที่สุดจะถูกเลือกและจดจำไว้ จากนั้นจะตรวจสอบนิพจน์ทั่วไปตามลำดับที่ปรากฏในไฟล์การกำหนดค่า การค้นหานิพจน์ทั่วไปจะสิ้นสุดลงในการจับคู่ครั้งแรก และจะใช้การกำหนดค่าที่เกี่ยวข้อง หากไม่พบการจับคู่กับนิพจน์ทั่วไป ระบบจะใช้การกำหนดค่าของตำแหน่งคำนำหน้าที่จดจำไว้ก่อนหน้านี้
ดังนั้นเมื่อ ตำแหน่ง ~ \.php$
คือการแข่งขัน ที่ตั้ง/someapp
จะถูกเพิกเฉย แม้ว่าจะเป็นคำขอก็ตาม .../someapp/somefile.php
.
มี ตำแหน่ง ~ \.php$ {...}
ปิดกั้นภายนอกพาเรนต์ ตำแหน่ง /someapp {...}
บล็อกไม่เปลี่ยนพฤติกรรมนี้
ฉันจะเปลี่ยนเส้นทาง HTTP ทุกคำขอไปยัง HTTPS ได้อย่างไร /someapp
ปราศจาก ต้องทำซ้ำ ถ้า
และ กลับ
บรรทัดลงในบล็อกตำแหน่ง php?