nginx केस असंवेदनशील पुनर्लेखन


15

मैं अपने नगीनक्स को यथासंभव साफ करने की कोशिश कर रहा हूं। मैं समझता हूं ~ * केस असंवेदनशील है, लेकिन मैं इसे केवल उदाहरण 2 में काम करने के लिए प्राप्त कर सकता हूं।

उदाहरण 1

rewrite ^/foobar http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;

उदाहरण 2-यह काम करता है, लेकिन यह ऊपर की रेखा के समान कुशल नहीं है।

if ( $request_filename ~* foobar ) {
         rewrite ^ http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;
   }

वहाँ मामले 1 के साथ असंवेदनशील पुनर्निर्देश करने के लिए एक तरीका है यह बहुत मैला हो रही बिना?

धन्यवाद।

जवाबों:


10

मेरी बस यही (और निश्चित) समस्या थी और इसका जवाब तलाशने की कोशिश में यहाँ समाप्त हुआ। Nginx प्रलेखन ( http://nginx.org/en/docs/http/ngx_http_rewrite_module.html ), स्पष्ट रूप से यह नहीं बताता है कि ~ * केवल एक बयान के अंदर काम करता है, लेकिन जाहिर है, यह मामला है।

यदि एक स्टेटमेंट के बाहर ngnix URL फिर से लिखने के लिए केस-असंवेदनशील नियमित अभिव्यक्ति प्राप्त करने के लिए, मुझे Apache / पर्ल शैली का उपयोग करना पड़ा:

rewrite "(?i)foobar" http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;

देखें http://perldoc.perl.org/perlretut.html (असंवेदनशील के लिए खोज)। ऐसा भी लगता है कि एक विशिष्ट कैप्चर ग्रुप के बाहर प्रीफ़िक्सिंग (? I) इसे पूरे सर्च स्ट्रिंग पर लागू करता है। नोट: यह "^ (? I) फोब्बर" के साथ काम नहीं करता है क्योंकि ऐसा लगता है कि "^" निहित है।

हालाँकि, यह सुनिश्चित करना, और भविष्य के किसी भी पुनर्लेखन को आसान बनाने और कम अस्पष्ट बनाने के लिए यदि आप उनमें से एक गुच्छा कर रहे हैं, तो आप ऐसा कुछ करना चाहते हैं:

location /foobar {
     rewrite "(?i)" http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;
}

उम्मीद है की यह मदद करेगा...


30

मुझे यह काम करने के लिए क्या मिला है:

rewrite ^/foobar http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;

आपको केवल यह करने की आवश्यकता है:

rewrite (?i)^/foobar http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;

इसका मतलब सिर्फ प्रीपेंड (?) है और अन्यथा सब कुछ मिलान के लिए समान है।


4
यह स्वीकृत उत्तर होना चाहिए।
दीकिंगफुटथ सिप

2
धन्यवाद। इतना आसान है, और अभी तक Nginx डॉक्स में खोजने के लिए बहुत मुश्किल है। बहुत संक्षिप्त सूचक की सराहना करते हैं!
PKHunter

1

अभी एक वेबसाइट पर काम कर रहा हूँ मैंने पाया कि यह भी काम करता है। उसी स्थिति में किसी भी व्यक्ति के लिए मैं इन आखिरी कुछ घंटों में था।

location ~* ^/foobar {
  rewrite ^(.*)$ $scheme://$http_host/whatever/foobar redirect;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.