مطابقة المجالات مع regex لـ lighttpd mod_evhost (www.domain.com / domain.com / sub.domain.com)
سؤال
أنا ألعب مع com.lighttpd على خادم خاص افتراضي صغير.I مجالين يشيران إلى الخادم.أنا أستخدم أحدث إصدار من lighttpd وmod_evhost على Ubuntu 8.10.
أحاول وضع قاعدة بحيث إذا طلب أي شخص domain.com أو www.domain.com يحصلون على الخدمة من /webroot/domain.com/www/
وبالمثل، إذا طلب أي شخص sub.domain.com يحصلون على الخدمة من /webroot/domain.com/sub/
إذا طلب الناس fake.domain.com (أين /webroot/domain.com/fake/ غير موجود) أرغب في خدمتهم من /webroot/domain.com/www/
المتطلب الثالث ليس مهمًا جدًا، يمكنني التعامل مع الأشخاص الذين يطلبون نطاقات فرعية غير موجودة يتم تقديمها من جذر مستند الخادم /webroot/server.com/www/ حتى لو طلبوا 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/"
}
إذن أين أخطأ؟في هذه اللحظة، جميع الطلبات ل *.domain.com و domain.com يتم خدمتهم من /webroot/domain.com/www/
سأكون ممتنًا لأي مساعدة يمكن أن تقدمها يا رفاق، وإذا تركت أي شيء ذي صلة، فيرجى إخباري!
هتافات ، روب
المحلول
يبدو أن التعابير الخاصة بك مبالغ فيها بعض الشيء.
هنا ما سأستخدمه:
// 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/"
}
نصائح أخرى
لأول واحد, مطابقة domain.com و www.domain.com: ^\b([wW]{3}\.)?[\w\d]*\.com\b$
, ، وبالنسبة للثاني، لست متأكدًا مما إذا كان التعبير العادي يمكنه تحديد ما إذا كان المجال الفرعي/الصفحة موجودًا، كما هو الحال لتحديد سلاسل النص محل الاهتمام.نأمل أن يساعدك ذلك قليلاً.