सवाल Nginx एक पथ को दूसरे रास्ते पर रीडायरेक्ट करता है


मुझे यकीन है कि इससे पहले पूछा गया है, लेकिन मुझे कोई समाधान नहीं मिल रहा है जो काम करता है।

एक वेबसाइट ने सीएमएस सेवाओं को स्विच किया है, लेकिन एक ही डोमेन है, मैं एक पेज के लिए एक nginx पुनर्लेख कैसे स्थापित करूं?

जैसे

पुराना पृष्ठ

http://sitedomain.co.uk/content/unique-page-name

नया पृष्ठ

http://sitedomain.co.uk/new-name/unique-page-name

कृपया ध्यान दें, मैं नहीं चाहता कि सामग्री पृष्ठ के भीतर सब कुछ रीडायरेक्ट किया जाए, लेकिन सचमुच ऊपर उल्लिखित यूआरएल। मेरे पास सेट अप करने के लिए लगभग 9 रीडायरेक्ट हैं, जिनमें से कोई भी पैटर्न में फिट नहीं है।

धन्यवाद!

संपादित करें: मुझे यह समाधान मिला, जो काम करता प्रतीत होता है, इस तथ्य को छोड़कर कि यह स्लैश के बिना रीडायरेक्ट करता है:

if ( $request_filename ~ content/unique-page-name/ ) {
   rewrite ^ http://sitedomain.co.uk/new-name/unique-page-name/? permanent;
}

लेकिन यह इस पर रीडायरेक्ट करता है:

http://sitedomain.co.uknew-name/unique-page-name/


38
2017-10-25 09:06


मूल




जवाब:


से प्रत्यक्ष उद्धरण संकट और आम गलतियों: कर रिवाइट्स:

वापसी निर्देश का उपयोग करके हम नियमित अभिव्यक्ति के मूल्यांकन से पूरी तरह से बच सकते हैं।

इस्तेमाल करें return के बजाय rewrite स्थायी रीडायरेक्ट के लिए। इस उपयोग के मामले में मेरा दृष्टिकोण यहां है ...

location = /content/unique-page-name {
  return 301 /new-name/unique-page-name;
}

66
2017-10-25 09:44



यह निश्चित रूप से अधिक पठनीय है। क्या यह मूल यूआरएल पर मौजूद किसी भी प्रश्न को बरकरार रखेगा? - SteveEdson
नहीं। यह नहीं होगा यदि आप वास्तव में स्थायी रीडायरेक्ट पर किसी भी प्रश्न को बरकरार रखना चाहते हैं, तो इस छोटी सी चाल को देखें ... gist.github.com/pothi/7152399 - Pothi Kalimuthu
क्या मैं सोच रहा हूं कि इसका उपयोग कर रहा हूं if nginx में बयान खराब है? क्या यह अभी भी रीराइट विधि का उपयोग करने से बेहतर अभ्यास होगा? - SteveEdson
का उपयोग करते हुए if वापसी निर्देश के साथ पूरी तरह से ठीक है। देख wiki.nginx.org/IfIsEvil । हां, आईएमओ, यह पुनर्लेखन का उपयोग करने से बेहतर है। - Pothi Kalimuthu


आदर्श रूप से यदि आप इससे बच सकते हैं तो आपको बयानों का उपयोग नहीं करना चाहिए। ऐसा कुछ काम कर सकता है (अवांछित)।

location ~ /content/(.*)$ {
    rewrite ^ /new-name/$1?$args permanent;
} 

9
2017-10-25 09:17



क्या वह सामग्री निर्देशिका में सब कुछ नहीं पकड़ पाएगा? मैं केवल व्यक्तिगत आइटम को रीडायरेक्ट करना चाहता हूं। उदाहरण के लिए, मेरे पास सामग्री निर्देशिका में एक और आइटम है, लेकिन मुझे इसे रीडायरेक्ट करने की आवश्यकता है ... / another-new-name / unique-page-name2 - SteveEdson
मैंने इसे हल कर लिया है। इसे सही तरीके से रीडायरेक्ट कर देता है, लेकिन स्क्रिप्ट मार रहा था यूआरएल के बाद उलझन में था। - SteveEdson
आह, मैंने सवाल गलत समझा। मैंने सोचा था कि आप केवल सामग्री भाग को बदलना चाहते थे। सिद्धांत वही रहता है। मुझे खुशी है कि यह आपके लिए काम कर रहा है। - Gevious
कोई समस्या नहीं, हालांकि मदद के लिए धन्यवाद, मुझे निश्चित रूप से भविष्य में इसका उपयोग करने की आवश्यकता होगी। - SteveEdson


मैंने निम्नलिखित समाधान का उपयोग किया:

rewrite ^(/content/unique-page-name)(.*)$   http://sitedomain.co.uk/new-name/unique-page-name/$2 permanent;

एक इलाज करता है।


9
2017-10-25 09:32



यह सही जवाब होना चाहिए। बेकार के लिए कोई ज़रूरत नहीं है location ब्लॉक। - PKHunter


मेरे लिए यह इस तरह के बराबर चिह्न के बिना काम किया:

location /old-url {
  return 301 /new-url;
}

5
2018-02-04 12:26



आपको स्थान ब्लॉक की बिल्कुल आवश्यकता नहीं है। महज प्रयोग करें rewrite। @ स्टीवएडिसन का जवाब देखें। - PKHunter