2012-01-31 22 views
12

Làm cách nào để nhận giá trị request_uri mà không có arg được nối vào cuối. Tôi biết có một biến uri nhưng tôi cần những giá trị ban đầu là các tiểu bang tài liệu Nginx:Nginx request_uri mà không có args

REQUEST_URI

Biến này là tương đương với gốc yêu cầu URI như nhận được từ khách hàng bao gồm các args. Nó không thể sửa đổi được. Xem $ uri cho URI sau viết lại/thay đổi. Không bao gồm tên máy chủ. Ví dụ: "/foo/bar.php?arg=baz"

Trả lời

10

Bạn đang tìm kiếm $ uri. Nó không có $ args. Trong thực tế, $ request_uri gần như tương đương với $ uri $ args.

Nếu bạn thực sự muốn chính xác $ request_uri với args bị tước, bạn có thể làm điều này.

local uri = string.gsub(ngx.var.request_uri, "?.*", "") 

Bạn sẽ cần phải có lua có sẵn nhưng điều đó sẽ thực hiện chính xác những gì bạn đang yêu cầu.

+5

Nhưng khi câu hỏi nói, $ uri có thể được sửa đổi bởi nginx (như khi một chuyển hướng lỗi xảy ra). Vì vậy, làm thế nào để có được yêu cầu ban đầu (chẳng hạn như trong $ yêu cầu) nhưng không có args? –

+0

Câu trả lời này là không chính xác, mặc dù đoạn lua là chính xác. Trong trường hợp ghi đè hoặc 'try_files', vv' $ uri' sẽ được thay đổi thành đường dẫn mà nginx hiện đang thử nghiệm/đánh giá. –

+0

Tôi đã xây dựng khóa bộ nhớ cache proxy tùy chỉnh của mình, điều này rất hữu ích. – sdkks

6

tôi sử dụng bản đồ này, trong đó hoạt động mà không lua:

map $request_uri $request_uri_path { 
    "~^(?P<path>[^?]*)(\?.*)?$" $path; 
} 
+0

bạn có thể giải thích những gì đang xảy ra ở đây không. lần đầu tiên tôi nhìn thấy regex như thế này. – sdkks

+1

~ (biểu thị đây là regex)^(neo để bắt đầu url) ((nhóm/ảnh chụp)? P (ghi nhóm này vào biến $ path) [^?] * (0 hoặc nhiều ký tự không phải là ' ? ')) (nhóm kết thúc) (\?. *)? (Có thể một chuỗi truy vấn, bắt đầu bằng dấu '?' Và có thể có nhiều ký tự hơn sau đó) $ (neo cuối url) –

+1

Tham chiếu đầy đủ tại đây: http://nginx.org/en/docs/http/server_names.html#regex_names –

Các vấn đề liên quan