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

发布于 2024-07-08 20:55:12 字数 1296 浏览 5 评论 0原文

我正在小型虚拟专用服务器上使用 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.comdomain.com 的所有请求均由 /webroot/domain.com/www/ 提供服务

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

干杯, 抢

I'm playing about with lighttpd on a small virtual private server. I two domains pointing to the server. I am using the latest version of lighttpd and mod_evhost on Ubuntu 8.10.

  1. I'm trying to set up a rule such that if anyone requests domain.com or www.domain.com they get served from /webroot/domain.com/www/

  2. Similarly, if anyone requests sub.domain.com they get served from /webroot/domain.com/sub/

  3. If people requests fake.domain.com (where /webroot/domain.com/fake/ does not exist) I would like them served from /webroot/domain.com/www/

The third requirement isn't quite so important, I can deal with people requesting subdomains that don't exist being served from the server document root of /webroot/server.com/www/ even if they requested fake.domain.com

I've included the relevant parts of my lighttpd.conf file below:

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/"    
}

So where am I going wrong? At the moment, all requests to *.domain.com and domain.com are being served from /webroot/domain.com/www/

I'd appreciate any help you guys could offer and if I've left anything relevant out please tell me!

Cheers,
Rob

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

请远离我 2024-07-15 20:55:12

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

这是我将使用的内容:

// 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/"    
}

Your regexes seem to be a bit overdone.

Here is what I would use:

// 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/"    
}

where:

[^.]+ matches anything but a dot, 1..n times

To match only valid sub domains with fall back to "www", you can use this:

// 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/"    
}
開玄 2024-07-15 20:55:12

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

For your first one, matching domain.com and www.domain.com: ^\b([wW]{3}\.)?[\w\d]*\.com\b$, and for the second one, I am unsure if regex can determine if a subdomain/page exists, as it is for identifying strings of text of interest. Hopefully that will help you out a bit.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文