nginx मापदंडों के साथ एक यूआरएल के लिए फिर से लिखना


16

मेरे पास इस प्रकार का एक URL है:

http://www.example.com/?param1=val1&param2=&param3=val3&param4=val4&param5=val5

और मैं इसे इस पर पुनर्निर्देशित करना चाहता हूं:

http://www.example.com/newparam/val3/val4

इसलिए मैंने बिना किसी सफलता के इस पुनर्लेखन नियम की कोशिश की है:

rewrite "/?param1=val1&param2=&param3=(.+)&param4=(.+)&param5=(.+)" http://www.example.com/newparam/$1/$2 redirect;

क्या nginx क्वेरी पैरामीटर से निपटने में सक्षम नहीं है?

संपादित करें: मैं सभी याचिकाओं को फिर से लिखना नहीं चाहता। मुझे केवल दूसरों को प्रभावित किए बिना, उस URL को फिर से लिखना होगा।

जवाबों:


15

ठीक है, रज्जब की प्रारंभिक मदद के लिए धन्यवाद, मैंने इस कार्य समाधान के लिए उसके नियम को फिर से परिभाषित किया है:

location / {
    if ($args ~* "/?param1=val1&param2=&param3=[0-9]+&param4=.+&param5=[0-9]+") {
        rewrite ^ http://www.example.com/newparam/$arg_param3/$arg_param4? last;
    }
}

मैंने सिर्फ अनंत पुनरावृत्ति से बचने के लिए एक शर्त जोड़ी है, और ए? नियम के अंत में प्रारंभिक पारमों से छुटकारा पाने के लिए । यह पूरी तरह से काम करता है :)


1
क्वेरी स्ट्रिंग मापदंडों के एक अलग क्रम की अनुमति देता है। इसलिए आपका ifकाम करना बंद हो जाएगा जब जैसे param2पहले जाता है param1
अलेक्जेंडर अजरोव

दिलचस्प। मेरे मामले में यह नहीं होगा क्योंकि यह एक ई-मेल में क्लिक करने योग्य यूआरएल है, लेकिन यह जानना अच्छा है। धन्यवाद।
डेविड मोरालेस

4
स्थान = / {
  rewrite ^ http://www.example.com/newparam/$arg_param3/$arg_param4;
}

तो, क्या मुझे $ arg_ और फिर पैरामीटर नाम लिखना चाहिए?
डेविड मोरालेस

हाँ, यह सबसे आसान होगा।
मार्टिन फेजोर्डवाल्ड

ठीक है, लेकिन मैं सभी याचिकाओं को फिर से लिखना नहीं चाहता। मुझे केवल दूसरों को प्रभावित किए बिना, उस URL को फिर से लिखना होगा।
डेविड मोराल्स

मैंने कुछ परीक्षण किए हैं। वह नियम एक अनंत पुनर्निर्देशन उत्पन्न करेगा। मुझे उस कोड के साथ एक नया उत्तर लिखना होगा जो मुझे काम करने के लिए मिला था। धन्यवाद :)
डेविड मोरेल्स

मुझे संभवतः उल्लेख करना चाहिए, कि आपको पुनरावृत्ति से बचने के लिए "स्थान =" के अलावा "स्थान /" घोषित करना होगा। मुझे लगता है कि आप इसे मुख्य मार्ग के रूप में कहीं भी प्रॉक्सी_पास पर ले जाएंगे। "स्थान = /" बिल्कुल / अनुरोधों से मेल खाता है। वैसे भी, $ args का मिलान ठीक लगता है, सिवाय इसके कि यह पैरामीटर के साथ किसी भी अनुरोध से मेल खाएगा? Param1 = val1 & ....
rzab
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.