lighttpd 1.4:在 www-to-no-www 重定向配置中包含方案,并排除路径

lighttpd 1.4:在 www-to-no-www 重定向配置中包含方案,并排除路径

我在基于 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 一起使用。

相关内容