ตาม https://nginx.org/r/rewrite...
หากสตริงแทนที่มีอาร์กิวเมนต์คำขอใหม่
อาร์กิวเมนต์คำขอก่อนหน้าจะถูกต่อท้าย หากเป็นเช่นนี้
ไม่ต้องการ ให้ใส่เครื่องหมายคำถามที่ท้ายสตริงการแทนที่
หลีกเลี่ยงการต่อท้าย
นี่คือรหัสขั้นต่ำเปล่าเพื่อทดสอบสถานการณ์นี้ ...
# ไฟล์กำหนดค่า /etc/nginx/nginx.conf:
เหตุการณ์ {}
http {
เซิร์ฟเวอร์ {
เขียนใหม่ ^/search/(.*)$ /search.php?q=$1 ถาวร;
# เขียนใหม่ ^/search/(.*)$ /search.php?q=$1? ถาวร;
}
}
เพิ่มการตั้งค่าสถานะถาวรสำหรับการทดสอบเท่านั้น เราสามารถบันทึกโค้ดด้านบนเป็น nginx.conf
และเริ่ม Nginx ขด
เอาต์พุตสำหรับรหัสด้านบนยืนยัน /search/apple?opt=123
จะเปลี่ยนเส้นทางไปที่ /search.php?q=apple&opt=123
.
ในทำนองเดียวกันสำหรับเงื่อนไขการเขียนซ้ำครั้งที่สอง...
# ไฟล์กำหนดค่า /etc/nginx/nginx.conf:
เหตุการณ์ {}
http {
เซิร์ฟเวอร์ {
# เขียนใหม่ ^/search/(.*)$ /search.php?q=$1 ถาวร;
เขียนใหม่ ^/search/(.*)$ /search.php?q=$1? ถาวร;
}
}
ขด
เอาต์พุตสำหรับรหัสด้านบนยืนยัน /search/apple?opt=123
จะเปลี่ยนเส้นทางไปที่ /search.php?q=apple
.
ดังนั้น,
หาก URI คำขอคือ /search/apple?opt=123 แล้ว URI ที่เขียนใหม่แตกต่างกันอย่างไร
ฉันเดาว่าจะเขียนใหม่ ^/search/(.)$ /search.php?q=$1 มันจะเป็น
/search.php?q=apple&opt=123 และสำหรับเขียนใหม่ ^/search/(.)$
/search.php?q=$1? มันจะเป็น /search.php?q=apple? แต่ฉันไม่แน่ใจ.
คุณพูดถูกและนี่คือผลลัพธ์ที่คาดหวัง