कैसे nginx में एकल url पुनर्निर्देशित करने के लिए?


111

मैं url संरचना के पुनर्गठन की प्रक्रिया में हूँ। मुझे विशिष्ट यूआरएल के लिए रीडायरेक्ट नियमों को सेटअप करने की आवश्यकता है - मैं NGINX का उपयोग कर रहा हूं।

मूल रूप से कुछ इस तरह:

http://example.com/issue1 --> http://example.com/shop/issues/custom_issue_name1
http://example.com/issue2 --> http://example.com/shop/issues/custom_issue_name2
http://example.com/issue3 --> http://example.com/shop/issues/custom_issue_name3

धन्यवाद!


3
यह "isse" या "मुद्दा" है?! उत्तर "मुद्दा" मान लें ...
मैथ्यू विलकॉक्सन

यह जारी है, टाइपो तय
tokmak

जवाबों:


122

इसे अपने सर्वर निर्देश में रखें:

location /issue {
   rewrite ^/issue(.*) http://$server_name/shop/issues/custom_issue_name$1 permanent;
 }

या इसे डुप्लिकेट करें:

location /issue1 {
   rewrite ^/.* http://$server_name/shop/issues/custom_issue_name1 permanent;
}
location /issue2 {
   rewrite ^.* http://$server_name/shop/issues/custom_issue_name2 permanent;
}
 ...

139
location ~ /issue([0-9]+) {
    return 301 http://example.com/shop/issues/custom_isse_name$1;
}

@ प्रतीकात्मक मैं सिर्फ संस्करण के साथ एक डॉक छवि पर यह परीक्षण किया 1.10.3और यह ठीक था, क्या आप किसी भी तरह से अपनी कॉन्फिगर फाइल प्रदान कर सकते हैं? आप शायद कुछ याद कर रहे हैं।
मोहम्मद अबूशैदी

34

यदि आपको कुछ रीडायरेक्ट से अधिक डुप्लिकेट करने की आवश्यकता है, तो आप एक मानचित्र का उपयोग करने पर विचार कर सकते हैं:

# map is outside of server block
map $uri $redirect_uri {
    ~^/issue1/?$    http://example.com/shop/issues/custom_isse_name1;
    ~^/issue2/?$    http://example.com/shop/issues/custom_isse_name2;
    ~^/issue3/?$    http://example.com/shop/issues/custom_isse_name3;
    # ... or put these in an included file
}

location / {
    try_files $uri $uri/ @redirect-map;
}

location @redirect-map {
    if ($redirect_uri) {  # redirect if the variable is defined
        return 301 $redirect_uri;
    }
}

4
यह वही है जो मैं यहां खोज रहा था - इनको एक सम्मिलित फ़ाइल में डालना मेरे .htaccess फ़ाइल को रीप्राइट से पूर्ण करने के लिए एक उत्कृष्ट तरीका है।
जोशी ने Qaribou

3
आप मौजूदा स्थान / ... प्रॉक्सी_पास प्रकार सेटअप के साथ इस मानचित्र दृष्टिकोण को कैसे संयोजित करेंगे?
माइकल डौसमैन

में @redirect-mapस्थान आप की कोशिश कर सकते if ($redirect_uri = "") {return 404;}proxy_pass सामान का स्थान है। एक पुनर्लेखन का उपयोग करने की आवश्यकता हो सकती है $redirect_uri
कोल टियरनी

इसकी आवश्यकता locationआपके सेटअप के आधार पर 2 ब्लॉकों के बजाय हो सकती है । यह उदाहरण के लिए क्राफ्ट सीएमएस के लिए है। location ~ ^(.*)$ { if ($redirect_uri) { # redirect if the variable is defined return 301 $redirect_uri; } try_files $uri $uri/ /index.php?p=$uri&$args; }
luwes
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.