nginx एक यूआरएल के अंत में एक पैरामीटर को फिर से लिखना


13

मुझे अपने रिवर्स प्रॉक्सी को कॉन्फ़िगर करने की आवश्यकता है ताकि यूआरएल के अंत में निम्नलिखित पैरामीटर को जोड़ा जाए: &locale=de-de

यह लगभग काम करता है:

rewrite ^(.*)$ $1&locale=de-de break;

हालाँकि, समस्या यह है कि मुझे '& locale = de-de' को केवल तभी जोड़ना होगा जब यह पहले से ही न हो और 'a' हो? ' url में ...

क्या मुझे ऐसा करने के लिए सही रेगेक्स बनाने पर कुछ मदद मिल सकती है?

एक और प्रश्न: मेरे url में प्रश्न चिह्न क्यों नहीं दिखाया गया है यदि मैं इसका उपयोग करता हूं:
$ uri? $ Args

या $ uri $ is_args $ args url को एन्कोड नहीं किया गया है और प्रश्न चिह्न को% 3f के रूप में दिखाया गया है।

विचार?

EDIT: ऐसा लगता है कि प्रॉक्सी_पास के साथ संयोजन में उपयोग करते समय यह व्यवहार मौजूद है। एक साधारण पुनर्लेखन में यह वास्तव में अच्छी तरह से काम करता है।

जवाबों:


15
  1. में rewriteआप यूआरएल के खिलाफ मेल खाते हैं पथ ही हिस्सा। जिसका अर्थ है, $1क्वेरी स्ट्रिंग नहीं होगी।
  2. डिफ़ॉल्ट रूप से, Nginx मूल क्वेरी स्ट्रिंग को फिर से लिखना प्रतिस्थापन में जोड़ता है।

इसलिए, यह लिखना सुरक्षित होना चाहिए

rewrite ^(.*)$ $1?locale=de-de break;

उस स्थिति में जब आप Nginx को मूल क्वेरी स्ट्रिंग को जोड़ना नहीं चाहते, बस ?प्रतिस्थापन URL के अंत में निर्दिष्ट करें:

rewrite ^(.*)$ $1?locale=de-de? break;

धन्यवाद! मैंने नहीं देखा कि मैंने इसे गलत तरीके से करने की कोशिश की।
साशा

A + यह सबसे अच्छा जवाब है
शुक्रिया

3

इस मैच के लिए rewriteक्वेरी परम शामिल नहीं है, इसलिए आपको कहीं और परीक्षण करने की आवश्यकता है।

प्रयत्न:

if ($args !~* locale=de\-de){
    rewrite ^(.*)$ $1&locale=de-de last;
}


@ अलेक्सेंडर गुड पॉइंट; कि rewriteजरूरतों को एक lastकरता है, तो सुरक्षित किया जाना है। संपादित।
शेन झुंझलाना

3

rewriteअनुरोध पैरामीटर, यूआरआई की केवल पथ भाग संशोधित नहीं करता है। मेरे अनुभव में, पुनर्लेखकों के साथ खिलवाड़ करना अजीब चक्रों की ओर जाता है, जहां नए पैरामीटर को एड इनफिनिटम कहा जाता है। रेनेराइट शायद नगनेक्स में ऐसा करने का तरीका नहीं है।

इसके बजाय, आपको निर्देश $argsका उपयोग करके चर को संशोधित करना चाहिए set:

set $args $args&locale=de-de;

मैं असहमत हूं कि $argsइसे म्यूट कर दिया जाना चाहिए। इसके बजाय, @ अलेक्जेंडर अजोरोव का समाधान देखें।
धन्यवाद
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.