Сопоставление доменов с регулярным выражением для Lighttpd mod_evhost (www.domain.com/domain.com/sub.domain.com)

StackOverflow https://stackoverflow.com/questions/261904

  •  06-07-2019
  •  | 
  •  

Вопрос

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

  1. Я пытаюсь установить правило, согласно которому если кто-нибудь запросит домен.com или www.домен.com их обслуживают из /webroot/domain.com/www/

  2. Аналогично, если кто-нибудь попросит суб.домен.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/"    
}

Так где я ошибаюсь?На данный момент все запросы *.домен.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$, а во втором я не уверен, может ли регулярное выражение определить, существует ли поддомен/страница, как и для идентификации строк интересующего текста.Надеюсь, это вам немного поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top