这不是经典的重定向www到非www,而是我想为所有指向非www页面的www请求添加规范标题,例如:
请求 https://www.example.com/index.html => 将规范标头添加到 https://example.com/index.html
我尝试使用通用重定向,但它看起来不正确,并且无法评估 %1/$1
$HTTP["host"] =~ "^www.(.*)$" {
setenv.add-response-header += ( "Link" => "<https://%1/$1>; rel='canonical'" )
}
思潮?
这不是 lighttpd mod_setenv的工作方式。 https://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_ModSetenv 没有描述该语法。
此外,lighttpd.conf 中不同条件块中的 += 可能不会像您认为的那样。 += 表示同一条件块中的 setenv。 一个条件块中只有一个 setenv(set(适用于请求。
综上所述,一个正确的解决方案不使用 lighttpd mod_setenv:
在 lighttpd 中,您可以使用mod_magnet来执行几行自定义 lua 代码。 有了它,您可以进行广泛的任意更改,包括在与lighty.env["request.uri"匹配后设置响应标头。
https://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_ModMagnet
好的,所以我选择了mod_magnet/Lua路线,其中涉及两个简单的步骤。
- 编辑 lighttpd.conf 以添加mod_magnet模块和请求的主机具有 www 的条件。
server.modules = ( mod_magnet, ) $HTTP["host"] ~= "^www.(.*)$" { magnet.attract-physical-path-to = ( "/path/to/canonical.lua" ) }
- 编写简单的规范.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