Lighttpd mod_evhost (www.domain.com/domain.com/sub.domain.com) के लिए regex के साथ मिलान डोमेन

मैं एक छोटे वर्चुअल प्राइवेट सर्वर पर lighttpd के साथ खेल रहा हूं। मैं सर्वर पर इशारा करते हुए दो डोमेन। मैं उबंटू 8.10 पर lighttpd और mod_evhost का नवीनतम संस्करण उपयोग कर रहा हूं।

  1. मैं एक नियम स्थापित करने की कोशिश कर रहा हूं जैसे कि अगर कोई domain.com या www.domain.com का अनुरोध करता है तो उन्हें /webroot/domain.com/www/

  2. इसी तरह, अगर कोई sub.domain.com का अनुरोध करता है तो उन्हें /webroot/domain.com/sub/

  3. यदि लोग fake.domain.com का अनुरोध करते हैं (जहां /webroot/domain.com/fake/ मौजूद नहीं है) तो मैं उन्हें < em> /webroot/domain.com/www/

The third requirement isn't quite so important, I can deal with people requesting subdomains that don't exist being served from the server document root of /webroot/server.com/www/ even if they requested fake.domain.com

मैंने नीचे अपनी lighttpd.conf फ़ाइल के प्रासंगिक भागों को शामिल किया है:

server.document-root = "/webroot/server.com/www/"

// regex to match sub.domain.com
$HTTP["host"] =~ "\b[a-zA-Z]\w*\.\b[a-zA-Z]\w*\.\b[a-zA-Z]\w*" {
    evhost.path-pattern = "/webroot/%0/%3/"    
}

// regex to match domain.com    
$HTTP["host"] =~ "\b[a-zA-Z]\w*\.\b[a-zA-Z]\w*" {
    evhost.path-pattern = "/webroot/%0/www/"    
}

So where am I going wrong? At the moment, all requests to *.domain.com and domain.com are being served from /webroot/domain.com/www/

मैं आपकी मदद की किसी भी मदद की सराहना करता हूं और यदि मैंने कुछ भी प्रासंगिक छोड़ दिया है तो कृपया मुझे बताएं!

चीयर्स, लूटना

0
मैंने अपने उत्तर को वैकल्पिक (वैकल्पिक) आवश्यकता संख्या 3 के लिए अनुकूलित करने के लिए संशोधित किया है। मैं इसका परीक्षण नहीं कर सकता, तो क्या आप यह काम करना चाहेंगे कि क्या यह काम करता है?
जोड़ा लेखक Tomalak, स्रोत

2 उत्तर

आपके पहले के लिए, domain.com और www.domain.com से मेल खाता है: ^ \ b ([wW] {3} \।)? [\ W \ d] * \। com \ b $ , और दूसरे के लिए, मुझे यकीन नहीं है कि अगर रेगेक्स निर्धारित कर सकता है कि कोई सबडोमेन/पेज मौजूद है, क्योंकि यह ब्याज के पाठ की तारों की पहचान करने के लिए है। उम्मीद है कि थोड़ा सा आपकी मदद करेगा।

0
जोड़ा

आपके regexes थोड़ा overdone प्रतीत होता है।

यहां मैं उपयोग करूँगा:

// regex to match sub.domain.com
$HTTP["host"] =~ "^[^.]+\.[^.]+\.[^.]+$" {
    evhost.path-pattern = "/webroot/%0/%3/"    
}

// regex to match domain.com    
$HTTP["host"] =~ "^[^.]+\.[^.]+$" {
    evhost.path-pattern = "/webroot/%0/www/"    
}

कहा पे:

[^.]+ matches anything but a dot, 1..n times

"Www" पर वापस आने के साथ केवल वैध उप डोमेन से मिलान करने के लिए, आप इसका उपयोग कर सकते हैं:

// default: route everything to "www"
$HTTP["host"] =~ "([^.]+\.)?domain\.com$" {
    evhost.path-pattern = "/webroot/%0/www/"
}

// specific regex overwrites "path-pattern" for valid sub-domains only
$HTTP["host"] =~ "^(valid1|valid2|sub)\.domain\.com$" {
    evhost.path-pattern = "/webroot/%0/%3/"    
}
0
जोड़ा
क्या यह एक रेगेक्स बनाने के लिए बुरा व्यवहार नहीं है जो अमान्य यूआरएल अक्षरों से मेल खाएगा?
जोड़ा लेखक Anders, स्रोत
केवल वैध डोमेन से मेल खाने के लिए रेगेक्स में संशोधन करना मुश्किल होगा। मैं चित्रित करने के लिए कोड का एक और बिट डालेंगे।
जोड़ा लेखक Tomalak, स्रोत
इसके अलावा: यदि यह कोड चलता है, तो अनुरोधों ने इसे आपके सर्वर पर बना दिया है। उनके होस्ट हेडर में उनके पास शायद कोई अमान्य वर्ण नहीं होंगे।
जोड़ा लेखक Tomalak, स्रोत