Tôi có nginx location
chỉ thị nhằm mục đích là "loại bỏ" tiền tố bản địa hóa từ URI cho chỉ thị proxy_pass
.Nginx - mã hóa (chuẩn hóa) một phần của URI
Ví dụ, để làm cho URI http://example.com/en/lalala sử dụng proxy_pass http://example.com/lalala
location ~ '^/(?<locale>[\w]{2})(/(?<rest>.*))?$' {
...
proxy_pass http://example/$rest;
...
}
Bằng cách này, biến rest
sẽ được giải mã khi truyền cho proxy_pass directeve. Nó có vẻ là một dự kiến behavior.
Vấn đề là khi URI của tôi chứa mã hóa không gian %20
truyền từ client
http://example.com/lala%20lala
nginx giải mã URI để
http://example.com/lala lala
tôi có thể nhìn thấy nó trong error.log tôi.
Câu hỏi đặt ra là - liệu có thể sử dụng mã hóa rest
biến bằng cách nào đó khi nó được truyền từ máy khách? Nếu tôi làm điều gì đó hoàn toàn sai, xin vui lòng, đề xuất đúng cách.
Cảm ơn bạn.
cảm ơn rất nhiều. Tôi biết về $ request_uri nhưng kiến thức hiện tại của tôi về nginx không cho phép tôi sửa đổi URI đúng cách. –
Hãy nhớ rằng nếu bạn sử dụng $ request_uri thì IT SILL KHÔNG THAY ĐỔI nếu một chuyển hướng nội bộ được thực hiện, chẳng hạn như khi viết lại được thực hiện hoặc áp dụng chỉ thị error_page. Chỉ có $ uri thay đổi trong những trường hợp đó, nhưng $ uri đã được giải mã nên nó không thể được sử dụng như là một thay thế chung cho $ request_uri. –