Соответствие доменов с регулярным выражением для lighttpd mod_evhost (www.domain.com / domain.com / sub.domain.com) - PullRequest
3 голосов
/ 04 ноября 2008

Я играю с lighttpd на небольшом виртуальном частном сервере. У меня два домена, указывающие на сервер. Я использую последнюю версию lighttpd и mod_evhost в Ubuntu 8.10.

  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 / не существует) Я бы хотел, чтобы их обслуживали с /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 /

Буду признателен за любую помощь, которую вы, ребята, могли бы предложить, и, если я оставлю что-нибудь важное, пожалуйста, скажите мне!

Ура, Rob

Ответы [ 2 ]

5 голосов
/ 04 ноября 2008

Ваши регулярные выражения, кажется, немного перестарались.

Вот что я бы использовал:

// 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/"    
}
1 голос
/ 04 ноября 2008

Для вашего первого соответствия domain.com и www.domain.com : ^\b([wW]{3}\.)?[\w\d]*\.com\b$, а для второго я не уверен, может ли регулярное выражение определить субдомен / страница существует, так как он предназначен для идентификации интересующего вас текста. Надеюсь, это поможет вам немного.

...