Nginx सर्वर नाम regex डैश की अनुमति देता है


0

मेरे पास एक साइट है, जो nginx पर चल रही है, जब सर्वर नाम आता है तो मुझे रेगेक्स के बारे में कुछ समस्या आती है, जैसा कि मुझे पता है कि nginx पर्ल कम्पेटिबल रेगुलर एक्सप्रेशंस (PCRE) का उपयोग कर रहा है।

अब मेरा सर्वर नाम:

server_name "~^(?<subdomain>\w+)\.parentdomain\.com$";

तो यह केवल निम्नलिखित की तरह मामले की अनुमति देता है:

abc.parentdomain.com

लेकिन मैं अपने उपडोमेन में डैश की अनुमति देना चाहता हूं, जैसे

abc-def.parentdomain.com

मैंने पैटर्न को संशोधित करने की कोशिश की, लेकिन कोई भाग्य नहीं

server_name "~^(?<subdomain>\w\-+)\.parentdomain\.com$";

server_name "~^(?<subdomain>\w+\-)\.parentdomain\.com$";

server_name "~^(?<subdomain>\w+)(\-)\.parentdomain\.com$";

क्या मेरे रेगेक्स में कुछ गड़बड़ है?

जवाबों:


2

बस एक के बाद एक डाल उन्हें विकल्प में नहीं बदल जाएगा - यह सिर्फ एक अनुक्रम बना देंगे। आप शब्द वर्णों की एक श्रृंखला की अनुमति दे रहे हैं, और फिर पानी का छींटा। उदाहरण के लिए subdom-.example.com

आपको इन वर्गों को विकल्प के रूप में स्पष्ट रूप से चिह्नित करने की आवश्यकता है, जैसे (\w|-)या [\w-]

server_name "~^(?<subdomain>(\w|-)+)\.parentdomain\.com$";
server_name "~^(?<subdomain>[\w-]+)\.parentdomain\.com$";

(इसके बारे में सोचें: यदि PCRE ने स्वचालित रूप से सब कुछ विकल्पों में बदल दिया, तो रेगेक्स में "पेरेंटडोमेन" शब्द होने से वास्तव में "पेरेंटडोमेन" नहीं होगा - यह "पी" या "ए" या "आर" या "ई" की अनुमति देगा। "या ...)


2

यदि आप शब्द वर्ण के बीच डैश की अनुमति देना चाहते हैं :

server_name "~^(?<subdomain>\w+(?:-\w+)*)\.parentdomain\.com$";

कहा पे

(?:-\w+)*एक गैर कब्जा समूह है जो कुछ शब्द पात्रों के बाद डैश की अनुमति देता है, समूह 0 या अधिक बार दिखाई दे सकता है। यह लगातार डैश से मेल नहीं खाता है।

मेल खा रहा है:

  • subdomain.parentdomain.com
  • sub-domain.parentdomain.com
  • sub-do-main.parentdomain.com
  • और इसी तरह...

लेकिन नहीं

  • sub--domain.parentdomain.com
  • -subdomain.parentdomain.com
  • subdomain-.parentdomain.com
  • ---.parentdomain.com
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.