我在基于 Debian 的系统上使用 lighttpd 1.4.45,并且有10-no-www.conf
(/etc/lighttpd/conf-available/10-no-www.conf
来自lighttpd
)重定向“www.<某物>“ 到 ”<某物>“。
此外,我使用certbot
“webroot”验证方法(用于 Let's Encrypt)。因此,我希望所有请求都不会被重定向(因此我为和非域/.well-known/acme-challenge/*
设置了单独的 webroot ,因为每个域都有不同的 SSL 证书,即使域仅用于重定向,它仍然需要有适当的 SSL 证书才能工作)。www.
www.
www.
这是原始内容(不适用于https,不排除acme-challenge部分):
$HTTP["host"] =~ "^www\.(.*)" {
url.redirect = ( "^/(.*)" => "http://%1/$1" )
}
这就是我想出的:
$HTTP["scheme"] == "http" {
$HTTP["url"] !~ "^/.well-known/acme-challenge/.*$" {
$HTTP["host"] =~ "^www\.(.*)" {
url.redirect = ( "^/(.*)" => "http://%1/$1" )
}
}
}
$HTTP["scheme"] == "https" {
$HTTP["url"] !~ "^/.well-known/acme-challenge/.*$" {
$HTTP["host"] =~ "^www\.(.*)" {
url.redirect = ( "^/(.*)" => "https://%1/$1" )
}
}
}
虽然这可行,但它看起来不必要地冗长——有没有办法参数化方案匹配,以便我可以在一个块而不是两个块中完成它?
答案1
以下命令可以自行运行,因为 lighttpd 目前不支持除“http”和“https”之外的方案:
$HTTP["url"] !~ "^/.well-known/acme-challenge/.*$" {
$HTTP["host"] =~ "^www\.(.*)" {
url.redirect = ( "^/(.*)" => "https://%1/$1" )
}
}
注意:lighttpd 在 lighttpd 1.4.53 中添加了对 TLS-ALPN-01 的支持。目前最新的 lighttpd 是 lighttpd 1.4.55。建议将 TLS-ALPN-01 与 Let's Encrypt 一起使用。