Theo https://nginx.org/r/rewrite...
Nếu một chuỗi thay thế bao gồm các đối số yêu cầu mới, thì
các đối số yêu cầu trước đó được thêm vào sau chúng. Nêu Đây la
không mong muốn, đặt dấu chấm hỏi ở cuối chuỗi thay thế
tránh để chúng được nối thêm
Đây là mã tối thiểu để kiểm tra kịch bản này ...
# tập tin cấu hình /etc/nginx/nginx.conf:
sự kiện {}
http {
người phục vụ {
viết lại ^/search/(.*)$ /search.php?q=$1 vĩnh viễn;
# viết lại ^/search/(.*)$ /search.php?q=$1? dài hạn;
}
}
Cờ vĩnh viễn chỉ được thêm vào để thử nghiệm. Chúng ta có thể lưu đoạn mã trên dưới dạng nginx.conf
và bắt đầu Nginx. Xoăn
đầu ra cho đoạn mã trên xác nhận /search/apple?opt=123
sẽ chuyển hướng đến /search.php?q=apple&opt=123
.
Tương tự, đối với điều kiện viết lại thứ hai...
# tập tin cấu hình /etc/nginx/nginx.conf:
sự kiện {}
http {
người phục vụ {
# viết lại ^/search/(.*)$ /search.php?q=$1 vĩnh viễn;
viết lại ^/search/(.*)$ /search.php?q=$1? dài hạn;
}
}
Xoăn
đầu ra cho đoạn mã trên xác nhận /search/apple?opt=123
sẽ chuyển hướng đến /search.php?q=apple
.
Cho nên,
Nếu URI yêu cầu là /search/apple?opt=123 thì URI được viết lại khác nhau như thế nào?
Tôi đoán để viết lại ^/search/(.)$ /search.php?q=$1 nó sẽ là
/search.php?q=apple&opt=123 và để viết lại ^/search/(.)$
/search.php?q=$1? nó sẽ là /search.php?q=apple? Nhưng tôi không chắc lắm.
Bạn nói đúng và đây là kết quả mong đợi.