使用正则表达式匹配域名为lighttpd mod_evhost(www.domain.com / domain.com / sub.domain.com)

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

  •  06-07-2019
  •  | 
  •  

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

  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 / 不存在)我希望他们从< EM> /webroot/domain.com/www /

  4. 第三个要求并不那么重要,我可以处理请求从 /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"] =~ "^[^.]+\.[^.]+\.[^.]+
[^.]+ matches anything but a dot, 1..n times
quot; { evhost.path-pattern = "/webroot/%0/%3/" } // regex to match domain.com $HTTP["host"] =~ "^[^.]+\.[^.]+
// default: route everything to "www"
$HTTP["host"] =~ "([^.]+\.)?domain\.com<*>quot; {
    evhost.path-pattern = "/webroot/%0/www/"
}

// specific regex overwrites "path-pattern" for valid sub-domains only
$HTTP["host"] =~ "^(valid1|valid2|sub)\.domain\.com<*>quot; {
    evhost.path-pattern = "/webroot/%0/%3/"    
}
quot; { evhost.path-pattern = "/webroot/%0/www/" }

其中:

<*>

要仅匹配有效的子域并回退到“www”,您可以使用:

<*>

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top