Сопоставление доменов с регулярным выражением для Lighttpd mod_evhost (www.domain.com/domain.com/sub.domain.com)
Вопрос
я играю с лайттпд на небольшом виртуальном частном сервере.У меня два домена, указывающие на сервер.Я использую последнюю версию Lighttpd и mod_evhost в Ubuntu 8.10.
Я пытаюсь установить правило, согласно которому если кто-нибудь запросит домен.com или www.домен.com их обслуживают из /webroot/domain.com/www/
Аналогично, если кто-нибудь попросит суб.домен.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/"
}
Так где я ошибаюсь?На данный момент все запросы *.домен.com и домен.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/"
}
Другие советы
Для вашего первого соответствия домен.com и www.домен.com: ^\b([wW]{3}\.)?[\w\d]*\.com\b$
, а во втором я не уверен, может ли регулярное выражение определить, существует ли поддомен/страница, как и для идентификации строк интересующего текста.Надеюсь, это вам немного поможет.