NGINX का उपयोग करके किसी भिन्न डोमेन पर रीडायरेक्ट कैसे करें?


जवाबों:


276

server_name .mydomain.com सिंटैक्स का उपयोग करके प्रत्यय मिलान का समर्थन करता है:

server {
  server_name .mydomain.com;
  rewrite ^ http://www.adifferentdomain.com$request_uri? permanent;
}

या किसी भी संस्करण 0.9.1 या उच्चतर पर:

server {
  server_name .mydomain.com;
  return 301 http://www.adifferentdomain.com$request_uri;
}

1
क्या मुझे सुनने के लिए पोर्ट में डालने की आवश्यकता नहीं है? उदाहरण के लिए 80 सुनो। मेरे पास कई डोमेन हैं जिन्हें मुझे एक प्राथमिक डोमेन पर पुनर्निर्देशित करने की आवश्यकता है, लेकिन मेरे सर्वर में विभिन्न अन्य डोमेन के लिए कई वर्चुअल सर्वर भी हैं।
रयान

1
@ रेयान listenनिर्दिष्ट नहीं किए जाने पर 80 को पोर्ट करने के लिए निर्देश चूक। यह वास्तव में सामान्य से थोड़ा अधिक जटिल है; देख nginx विन्यास डॉक्स अधिक जानकारी के लिए।
यिट्ज़

2
आखिर में क्या ?हासिल होता है ?
डैन डस्केलस्क्यू

5
बीच क्या अंतर है rewriteऔर return 301 $scheme://www.adifferentdomain.com$request_uri;?
डैन डस्केलस्क्यू

6
? एक फिर से लिखना nginx मूल क्वेरी स्ट्रिंग को जोड़ने के लिए नहीं कहता है। चूंकि $request_uriपहले से ही क्वेरी स्ट्रिंग है, इसलिए इसे फिर से जोड़ने की कोई आवश्यकता नहीं है। return 301वाक्य रचना नया है, और वहाँ दो तरीकों के बीच व्यवहार में कोई अंतर नहीं होना चाहिए, लेकिन तो मैं सुरक्षित वाक्य रचना के साथ चला गया जब मैं मूल रूप से इस सवाल का जवाब दे, कई वितरण के लिए आवश्यक संस्करण नहीं था,।
कॉलबिजैक


15

यदि आप कर सकते हैं तो फिर से लिखना मॉड्यूल का उपयोग क्यों करें return? तकनीकी रूप से बोलना, returnरीराइट मॉड्यूल का हिस्सा है जैसा कि आप यहाँ पढ़ सकते हैं लेकिन इस स्निपेट को इम्हो को पढ़ना आसान है।

server {
    server_name  .domain.com;

    return 302 $scheme://forwarded-domain.com;
}

आप इसे 301 रीडायरेक्ट भी दे सकते हैं।


1
क्या यह पथ और क्वेरी को समान रखेगा?
एमपीएन

3
कोई भी उदाहरण यह नहीं करता है कि @ मर्क। लेकिन मुझे लगता है कि आप पिछले जवाबों को कुछ इस तरह से पेश कर सकते हैं:return 302 $scheme://forwarded-domain.com$request_uri;
रॉबिन वैन बालन

साइड नोट पर, कई मामलों में, आपको संभवतः योजना को संरक्षित करने के बजाय https में पुनर्निर्देशित करना चाहिए (यानी $ योजना के बजाय https का उपयोग करें)। यह उन्हीं कारणों के लिए है, जो प्रोटोकॉल-रिलेटिव लिंक अब पदावनत माना जाता है - paulirish.com/2010/the-protocol-relative-url
mahemoff

@ शेमहॉफ यह पूरी तरह सच नहीं है। Ssl को डिस्चार्ज करने वाले लोडबेलर के पीछे वेबसर्वर होने के मामले पर विचार करें।
सेबस्टियन नीरा

11

HTTPRewriteModule के माध्यम से काम करना चाहिए ।

उदाहरण के लिए www.example.com से फिर से लिखें।

server {    
    server_name www.example.com;    
    rewrite ^ http://example.com$request_uri? permanent; 
}

यह सिर्फ www.example.com को example.com पर पुनर्निर्देशित कर रहा है। मैं दोनों को एक अलग डोमेन पर पुनर्निर्देशित करना चाहता हूं। क्या मैं एक नियम में ऐसा कर सकता हूं?
डेब

मुझे यकीन नहीं है, लेकिन मुझे लगता है कि server_name mydomain.com; www.adifferentdomain.com स्थायी लिखना; } करना चाहिए? कि सब कुछ लेना चाहिए * .mydomain.com
ud

@deb तुम बस होगा server_name example.com www.example.com;
सिट्रसपुइ

यह प्रश्न विशेष रूप से किसी भी उप डोमेन को अलग डोमेन पर पुनर्निर्देशित करने के लिए कहता है । यह उत्तर दोनों में से कोई भी नहीं (स्पष्ट रूप से) उत्तर देता है।
Kissaki

यह महत्वपूर्ण 301 गायब है!
शालिक

9

यदि आप "domain1.com" के लिए अनुरोधों को "domain2.com" पर पुनर्निर्देशित करना चाहते हैं, तो आप एक सर्वर ब्लॉक बना सकते हैं जो इस तरह दिखता है:

server {
    listen 80;
    server_name domain1.com;
    return 301 $scheme://domain2.com$request_uri;
}

किसी को https: // अनुरोध को भी पुनर्निर्देशित करना पड़ सकता है। listen 443;
रफीक फरहाद

0

अस्थायी पुनर्निर्देश

rewrite ^ http://www.RedirectToThisDomain.com$request_uri? redirect;

स्थायी पुनर्निर्देश

rewrite ^ http://www.RedirectToThisDomain.com$request_uri? permanent;

विशिष्ट साइट के लिए nginx कॉन्फ़िगरेशन फ़ाइल में:

server {    
    server_name www.example.com;
    rewrite ^ http://www.RedictToThisDomain.com$request_uri? redirect;

}

0

आप बस सर्वर {} ब्लॉक के अंदर एक शर्त लिख सकते हैं:

server { 

    if ($host = mydomain.com) {
        return 301 http://www.adifferentdomain.com;
    } 
}

Nginx ( nginx.com/resources/wiki/start/topics/depth/ifisevil ) पर 'यदि' कथनों का उपयोग करके आपको सावधान रहने की आवश्यकता है । इस स्थिति में आप इसके बजाय 'server_name mydomain.com' का उपयोग कर सकते हैं।
मार्टी

यदि स्थान संदर्भ में उपयोग किए जाने पर बुराई है, तो पुनर्निर्देशित होस्ट निर्दिष्ट करने के लिए उपयोग किए जाने पर सुरक्षित है
cryptoKTM
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.