nginx: एक स्थान को छोड़कर सभी को फिर से लिखना


11

अभी मेरा nginx कई डोमेन को एक मुख्य डोमेन पर फिर से लिख रहा है जिसका हम उपयोग कर रहे हैं। यहाँ मेरे विन्यास से एक नियम है:

server {
  listen X.X.X.X:80;
  server_name .exampleblog.org;
  rewrite ^(.*) http://blog.example.org$1 permanent;
}

** exampleblog.org * पर आने वाले प्रत्येक अनुरोध को blog.example.org पर पुनः निर्देशित किया जाता है

अब मैं www.exampleblog.org/+ और exampleblog.org/+ चाहता हूं कि उपयोगकर्ता को हमारे Google प्लस पृष्ठ पर पुनर्निर्देशित करें। इसने विभिन्न संस्करणों की कोशिश की:

server {
  listen X.X.X.X:80;
  server_name .exampleblog.org;
  location /+ {
    rewrite ^ https://plus.google.com/12345678901234567890/ permanent;
  }
  rewrite ^(.*) http://blog.example.org$1 permanent;
}

ऊपर और अन्य संस्करणों को blog.example.org/+ पर पुनर्निर्देशित करें मैं गलत क्या कर रहा हूं?

जवाबों:


14

Nginx में निर्देश जरूरी नहीं कि वे विन्यास फाइल में दिखाई देने वाले क्रम में लागू हों। किसी स्थान के चयन से पहले सर्वर-स्तरीय पुनर्लेखन कार्य करता है, और यह हमेशा मेल खाता है, इसलिए यह सब कुछ रीडायरेक्ट करेगा। आपको दूसरे स्थान की आवश्यकता है जैसे:

server {
  listen x.x.x.x:80;
  server_name .exampleblog.org;

  # Match /+ requests exactly    
  location = /+ {
    # I prefer return 301 instead of rewrite ^ <target> permanent,
    # but you can use either
    return 301 http://plus.google.com/1234567890/;
  }

  # Match everything else
  location / {
    return 301 http://blog.example.org$request_uri;
  }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.