3

我正在一个小型虚拟专用服务器上使用lighttpd 。我指向服务器的两个域。我在 Ubuntu 8.10 上使用最新版本的 lighttpd 和 mod_evhost。

  1. 我正在尝试设置一个规则,这样如果有人请求domain.comwww.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/

我很感激你们可以提供的任何帮助,如果我遗漏了任何相关的内容,请告诉我!

干杯,罗伯

4

2 回答 2

5

你的正则表达式似乎有点过头了。

这是我会使用的:

// 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/"    
}
于 2008-11-04T13:51:42.650 回答
1

对于您的第一个,匹配domain.comwww.domain.com : ^\b([wW]{3}\.)?[\w\d]*\.com\b$,对于第二个,我不确定正则表达式是否可以确定是否存在子域/页面,因为它用于识别感兴趣的文本字符串。希望这会对您有所帮助。

于 2008-11-04T13:47:03.627 回答