ฉันมีอินสแตนซ์นี้ที่การค้นหา html <form>
บังคับให้ไปที่ /search/index.php?q=term
และต้องการใช้อย่างเช่น /คำที่ต้องการค้นหา
แทน.
นี่คือลักษณะของการกำหนดค่าในขณะนี้:
สถานที่ /ค้นหา/ {
เขียนใหม่ ^/search/(.+) /search/index.php?q=$1;
}
การเข้าถึงตำแหน่งนี้โดยตรงใช้งานได้ แต่ในขณะที่กรอกแบบฟอร์มและค้นหาจะใช้ "ต้นทาง" แทนการเขียนใหม่
ฉันลองใช้การเปลี่ยนเส้นทาง "ย้อนกลับ" แต่นั่นทำให้บริการ nginx ขัดข้อง:
สถานที่ /ค้นหา/ {
เขียนใหม่ ^/search/(.+) /search/index.php?q=$1;
เปลี่ยนเส้นทาง ^/search/index.php?q=(.+) /search/$1;
}
ฉันยังพยายามเขียนใหม่ด้วย ถาวร
ธงซึ่งไม่ได้ทำอะไรเลย
สถานที่ /ค้นหา/ {
เขียนใหม่ ^/search/(.+) /search/index.php?q=$1;
เขียนใหม่ ^/search/index.php?q=(.+) /search/$1 ถาวร;
}
ฉันรู้ว่ามันเป็นไปได้ที่จะบรรลุสิ่งเดียวกันใน PHP ด้วยสิ่งนี้:
// บนสุดของ /search/index.php
ถ้า (str_starts_with($_SERVER['REQUEST_URI'], '/search/index.php')){
$โปรโตคอล = ($_SERVER['HTTP_X_FORWARDED_PROTO'] == "https") ? "https" : "http";
$เซิร์ฟเวอร์ = $_SERVER['HTTP_HOST'];
$แบบสอบถาม = อาร์เรย์ ();
parse_str($_SERVER['QUERY_STRING'], $แบบสอบถาม);
$search = $queries['q'] ?? "";
ส่วนหัว ("ตำแหน่ง: $โปรโตคอล://$เซิร์ฟเวอร์/ค้นหา/$ค้นหา");
}
แต่คิดว่ามันจะดีกว่าถ้า nginx สามารถจัดการสิ่งนี้ได้ (ถ้าเป็นไปได้เลย)
ไม่มีใครรู้วิธีเขียนใหม่และเปลี่ยนเส้นทางการเข้าถึงจากต้นทาง ?