redirect - nginx: मापदंडों के साथ यूआरएल का एक बहुत(2000+) को फिर से लिखना



parameters url-rewriting (1)

मुझे बहुत सारे URL को params के साथ माइग्रेट करना है, जो इस तरह दिखते हैं:

/somepath/somearticle.html?p1=v1&p2=v2 --> /some-other-path-a

और बिना params के भी एक ही URL:

/somepath/somearticle.html --> /some-other-path-b

मुश्किल हिस्सा यह है कि दो गंतव्य URL नई प्रणाली में पूरी तरह से अलग-अलग पृष्ठ हैं, जबकि पुराने सिस्टम में params ने संकेत दिया है कि डिफ़ॉल्ट रूप से किस टैब को खोलना है।

मैंने अलग-अलग नियमों को फिर से लिखने की कोशिश की, लेकिन इस नतीजे पर पहुंचा कि नगीनक्स रीराइट्स द्वारा मापदंडों पर विचार नहीं किया जाता है। मुझे स्थान निर्देशों का उपयोग करने का एक तरीका मिला, लेकिन 2000+ स्थान निर्देशों का होना गलत लगता है।

किसी को भी यह कैसे प्राप्त करने के लिए एक सुंदर तरीका जानता है? यह ध्यान देने योग्य हो सकता है कि उन 2000+ रीडायरेक्ट के पास, मेरे पास एक और 200.000 (!) रीडायरेक्ट है। वे पहले से ही काम करते हैं, क्योंकि वे सरल हैं। इसलिए मैं जो जोर देना चाहता हूं वह यह है कि प्रदर्शन महत्वपूर्ण होना चाहिए!


आप क्वेरी स्ट्रिंग (इसके बाद से कुछ भी) का मिलान स्थान पर नहीं कर सकते हैं और अभिव्यक्ति को rewrite , क्योंकि यह सामान्य यूआरआई का हिस्सा नहीं है। विवरण के लिए यह दस्तावेज़ देखें।

संपूर्ण URI $request_uri पैरामीटर में उपलब्ध है। यदि पैरामीटर एक सुसंगत क्रम में नहीं भेजे जाते हैं तो $request_uri का उपयोग करना समस्याग्रस्त हो सकता है।

कई URI को संसाधित करने के लिए, उदाहरण के लिए, एक map निर्देश का उपयोग करें:

map $request_uri $redirect {
    default 0;
    /somepath/somearticle.html?p1=v1&p2=v2  /some-other-path-a;
    /somepath/somearticle.html              /some-other-path-b;
}

server {
    ...
    if ($redirect) {
        return 301 $redirect;
    }
    ...
}

आप map में नियमित अभिव्यक्तियों का भी उपयोग कर सकते हैं, उदाहरण के लिए, यदि यूआरआई में वैकल्पिक बेजोड़ पैरामीटर होते हैं। इस दस्तावेज़ को और देखें।





url-rewriting