Nginx सभी पुराने डोमेन उप डोमेन को नए पर पुनर्निर्देशित करता है


10

मेरे पास एक बहुत लंबा डोमेन था, इसलिए मैंने इसे एक छोटे और अधिक अनुकूल में बदलने का फैसला किया। लेकिन चूंकि मेरे पास बहुत सारे उपडोमेन हैं (वास्तव में, मेरे पास एक उपडोमेन वाइल्डकार्ड है), मैं केवल डोमेन भाग को बदलते हुए उपडोमेन रखना चाहता था। इसलिए, मैंने निम्नलिखित नियम बनाया:

server {
  listen 80;
  server_name ~^(\w+)\.olddomain\.com$;

  rewrite ^ $scheme://$1.doma.in$request_uri? permanent;
}

मैंने कई अन्य प्रश्न पढ़े हैं जहां इस स्निपेट ने समस्या को हल किया। लेकिन मेरे साथ, नग्नेक्स हमेशा .domain.inकिसी भी उप-डोमेन के बिना पुनर्निर्देश करता है । मैं क्या खो रहा हूँ? मैंने regex101 के खिलाफ rexx का परीक्षण किया है और उदाहरण ठीक काम करते हैं, Nginx इसे पुनर्निर्देशित करने में असमर्थ लगता है।

जवाबों:


22

चूंकि nginx 0.8.25 नामित कैप्चर का उपयोग server_name में किया जा सकता है। आपको उनका उपयोग करना चाहिए।

यहां, उप-डोमेन को एक चर में संग्रहीत किया जाएगा जिसे कहा जाता है $sub। तब आप इसे rewriteनिर्देश में फिर से उपयोग कर पाएंगे :

server {
  listen 80;
  server_name ~^(?<sub>\w+)\.olddomain\.com$;
  rewrite ^ $scheme://$sub.doma.in$request_uri? permanent;
}

वैकल्पिक रूप से, आप अपने वास्तविक Regex को रख सकते हैं और $1एक returnनिर्देश में उपयोग कर सकते हैं :

server {
  listen 80;
  server_name ~^(\w+)\.olddomain\.com$;
  return 301 $scheme://$1.doma.in$request_uri;
}

अंत में, ध्यान दें कि returnनिर्देश पुनर्निर्देश के लिए सबसे अच्छा तरीका है। आप पुनर्निर्देशन के लिए उपयोग करके नुकसान में भाग सकते हैं rewrite


उत्तम। मैंने रिटर्न एप्रोच का उपयोग किया लेकिन फिर भी रेगेक्स भाग का नाम दिया, यह समझना ज्यादा आसान है।
ranisalt

क्या होगा अगर हम बिना उपडोमेन (www) के भी पुनर्निर्देशित करना चाहते हैं? जैसे: sub1.ex.to> sub1.new.in और ex.to> www.new.in?
आर। कैंसर यानबाकन

1
ध्यान दें कि '\ w' कुछ वर्णों से मेल नहीं खाता है जो डोमेन नाम में हो सकते हैं, जैसे '-'। इसलिए उपरोक्त रेगेक्स को पुनर्निर्देशित test-sub.doma.inकिया जाएगा .domai.in!
वोल्फगैंग

उपयोग के लिए [\ w \ - \ _] + के बजाय \ _ + उपडोमेन के लिए - जिनमें और
सज्जाद अशरफ

~रेगेक्स शुरुआत में क्या करता है? यह ऐसा नहीं करता क्योंकि ^रेगेक्स में कुछ दिखाई देगा ।
hobbes3
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.