โดยทั่วไปแล้วการเรียกใช้แอปภายใต้คำนำหน้า URI เมื่อตัวแอปเองไม่คิดว่าจะเป็นเรื่องยุ่งยาก และวิธีแก้ปัญหาที่เชื่อถือได้เพียงอย่างเดียวคือแก้ไข/ตั้งค่าแอปโดยสร้างลิงก์สินทรัพย์/เส้นทางทั้งหมดที่เกี่ยวข้องหรือรวมถึงคำนำหน้าด้วย ถูกปรับใช้ภายใต้. วิธีแก้ไขที่มีอยู่เกือบทั้งหมดคือเขียนคำตอบของแอปพลิเคชันใหม่ "ทันที" แทนที่ลิงก์ที่สร้างขึ้นด้วยลิงก์ใหม่ คำตอบทั่วไปบางอย่างคือ ที่นี่ข้อควรพิจารณาเพิ่มเติมบางประการสามารถพบได้ ที่นี่.
อย่างไรก็ตามหากเป็น SPA จริง ๆ สมมติว่าเป็นแอป React ที่ใช้บางอย่างเช่น แฮชเราเตอร์
ค่อนข้างมากกว่า เบราว์เซอร์ เราเตอร์
การแก้ปัญหาโดยอ้างอิงจากการเขียนซ้ำตามเงื่อนไขตามคำขอ ผู้อ้างอิง
ส่วนหัว HTTP เป็นไปได้:
เซิร์ฟเวอร์ {
...
ถ้า ($http_referer ~ ^https?://yourdomain.com/app1/) {
เขียนใหม่ ^ /app1$uri;
}
ถ้า ($http_referer ~ ^https?://yourdomain.com/app2/) {
เขียนใหม่ ^ /app2$uri;
}
...
ตำแหน่ง /app1/ {
proxy_pass http://container1/;
}
ตำแหน่ง /app2/ {
proxy_pass http://container2/;
}
}
เครื่องหมายทับต่อท้ายทั้งหมดที่ใช้ที่นี่ใช้เพื่อจุดประสงค์ การลบเครื่องหมายทับใด ๆ จะทำให้การแก้ปัญหาเสียหาย!
สิ่งนี้ไม่สามารถใช้ได้กับสิ่งอื่นใดนอกจาก SPA (รวมถึงแอปพลิเคชันที่ใช้การกำหนดเส้นทาง "เสมือน" ตาม API ประวัติเบราว์เซอร์ HTML5) เนื่องจากตรรกะการเขียนซ้ำจะใช้งานไม่ได้หลังจากการเปลี่ยนจากหน้าแรกไปยังหน้าแรก