Nói chung, việc chạy ứng dụng dưới tiền tố URI khi bản thân ứng dụng không mong đợi đó là một điều khó khăn và giải pháp đáng tin cậy duy nhất là sửa/thiết lập ứng dụng làm cho ứng dụng tạo ra tất cả các liên kết nội dung/tuyến tương đối hoặc bao gồm tiền tố đó được triển khai dưới. Hầu hết mọi giải pháp thay thế hiện có là viết lại các phản hồi của ứng dụng "ngay lập tức" thay thế các liên kết đã tạo bằng các liên kết mới. Một số loại câu trả lời chung chung là đây, một số cân nhắc bổ sung có thể được tìm thấy đây.
Tuy nhiên, nếu đó là một SPA thực sự, giả sử ứng dụng React sử dụng thứ gì đó như BămRouter
còn hơn là Trình duyệtRouter
, một cách giải quyết dựa trên việc viết lại có điều kiện theo yêu cầu người giới thiệu
Tiêu đề HTTP có thể:
người phục vụ {
...
nếu ($http_referer ~ ^https?://yourdomain.com/app1/) {
viết lại ^ /app1$uri;
}
nếu ($http_referer ~ ^https?://yourdomain.com/app2/) {
viết lại ^ /app2$uri;
}
...
vị trí /app1/ {
proxy_pass http://container1/;
}
vị trí /app2/ {
proxy_pass http://container2/;
}
}
Tất cả các dấu gạch chéo được sử dụng ở đây đều được sử dụng có mục đích, việc loại bỏ bất kỳ dấu gạch chéo nào trong số chúng sẽ phá vỡ giải pháp!
Điều này không áp dụng cho bất kỳ thứ gì khác ngoài SPA (bao gồm các ứng dụng đang sử dụng định tuyến "ảo" dựa trên API lịch sử trình duyệt HTML5) vì logic viết lại sẽ bị hỏng sau lần chuyển đổi từ trang này sang trang đầu tiên.