2012-01-31 12 views
12

मुझे अंत में संलग्न तर्कों के बिना request_uri का मूल्य कैसे प्राप्त होगा। मैं जानता हूँ कि वहाँ एक uri चर लेकिन मैं Nginx प्रलेखन राज्यों के रूप में मूल मूल्य की जरूरत है:बिना पंजीकरण के Nginx request_uri

REQUEST_URI

रूप सहित ग्राहक से प्राप्त यह चर मूल अनुरोध URI के बराबर है तर्क इसे संशोधित नहीं किया जा सकता है। पोस्ट-रीराइट/परिवर्तित यूआरआई के लिए $ uri देखें। होस्ट नाम शामिल नहीं है। उदाहरण: "/foo/bar.php?arg=baz"

उत्तर

10

आप $ uri की तलाश में हैं। इसमें $ args नहीं हैं। वास्तव में, $ request_uri लगभग $ uri $ args के बराबर है।

यदि आप वास्तव में तर्कों के साथ वास्तव में $ request_uri चाहते हैं, तो आप यह कर सकते हैं।

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

आप lua उपलब्ध की आवश्यकता होगी, लेकिन यह है कि आप वास्तव में क्या पूछ रहे हैं क्या करेंगे।

+5

लेकिन जैसे-जैसे सवाल कहते हैं, $ uri nginx (जब एक त्रुटि रीडायरेक्ट होने की तरह) द्वारा संशोधित किया जा सकता है। तो मूल अनुरोध कैसे प्राप्त करें (जैसे $ अनुरोध में) लेकिन बिना तर्क के? –

+0

यह उत्तर गलत है, हालांकि लुआ टुकड़ा सही है। पुनर्लेखन या 'try_files' इत्यादि की स्थिति में,' $ uri' उस पथ में बदल दिया जाएगा जो वर्तमान में nginx परीक्षण/मूल्यांकन कर रहा है। –

+0

मैं अपनी कस्टम प्रॉक्सी कैश कुंजी बना रहा था, यह उपयोगी था। – sdkks

6

मैं इस नक्शा है, जो lua बिना काम करता है का उपयोग करें:

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

क्या आप यहां समझा सकते हैं कि क्या हो रहा है। पहली बार मैं इस तरह regex देख रहा हूँ। – sdkks

+1

~ (यह दर्शाता है कि यह एक रेगेक्स है)^(यूआरएल की शुरुआत करने के लिए एंकर) ((समूह/कैप्चर)? पी (इस समूह को परिवर्तनीय $ पथ में कैप्चर करें) [^?] * (0 या अधिक वर्ण जो ' ? ')) (अंत समूह) (\?। *)? (हो सकता है कि एक क्वेरीस्ट्रिंग, '?' से शुरू हो और इसके बाद और अधिक अक्षर संभव हों) $ (यूआरएल का एंकर एंड) –

+1

यहां पूर्ण संदर्भ: http://nginx.org/en/docs/http/server_names.html#regex_names –