Lighttpd - 添加规范 headers 到 www 页面

Lighttpd - add canonical headers to www pages

这不是将 www 重定向到 non-www 的经典方法,而是我想将规范 headers 添加到所有指向 non-www 页面的 www 请求,例如:

请求https://www.example.com/index.html => Add canonical header to https://example.com/index.html

我已尝试使用通用重定向,但它看起来不正确,并且无法评估 %1/$1

$HTTP["host"] =~ "^www\.(.*)$" {
  setenv.add-response-header += ( "Link" => "<https://%1/>; rel='canonical'" )
}

想法?

lighttpd mod_setenv 不是这样工作的。 https://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_ModSetenv 没有描述该语法。

此外,lighttpd.conf 中不同条件块中的 += 可能与您认为的不同。 += 用于同一条件块中的 setenv。一个条件块中只有一个 setenv(集合)适用于一个请求。

综上所述,一种正确的解决方案不使用 lighttpd mod_setenv:

在 lighttpd 中,您可以使用 mod_magnet 来执行几行自定义 lua 代码。有了它,您可以进行广泛的任意更改,包括在匹配 lighty.env["request.uri"].
后设置响应 headers https://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_ModMagnet

好的,所以我选择了 mod_magnet / Lua 路线,其中涉及两个简单的步骤。

  1. 编辑 lighttpd.conf 以添加 mod_magnet 模块和请求主机具有 www.
  2. 时的条件
server.modules = ( mod_magnet, )
$HTTP["host"] ~= "^www\.(.*)$" {
  magnet.attract-physical-path-to = ( "/path/to/canonical.lua" )
}
  1. 编写简单的 canonical.lua 文件(请注意,我添加了对 www. 的检查,但这不是必需的,因为文件仅在主机拥有时执行!)
function string.starts(String,Start)
 return string.sub(String,1,string.len(Start))==Start
end

if string.starts(lighty.request['Host'], "www.") then
  lighty.header["Link"] = "<https://"..string.sub(lighty.request['Host'],5)..lighty.env["request.uri"]..">;rel=\"canonical\""
end