我对静态html页面有这样的配置,其中重定向也从平面文件完成:
旧位置.html
<!-- {new-location.html} -->
<!DOCTYPE html>
<html>
<head>
<title>Redirecting to new location</title>
<link rel="canonical" href="new-location.html" />
<meta name="robots" content="noindex, follow">
<noscript><meta http-equiv="refresh" content="0;URL='new-location.html'" /></noscript>
<script>window.location = "new-location.html"</script>
</head>
<body>
<a href="new-location.html">[old-location.html moved here]</a>
</body>
html应该只是一个优雅的回退链,而第一行的注释是正确的http
重定向的配置挂钩,因为没有运行时环境,所以需要由Web服务器完成。
目前,我在Openresty中这样做,使用Lua的匹配模式,找到新位置,然后将其设置为301重定向。
header_filter_by_lua_block {
local address = ngx.var.document_root .. ngx.var.document_uri
local file = io.open(address, "rb")
local content = file:read(100)
file:close()
local location = string.match(content, "{(%g+)}")
ngx.header['location'] = location
ngx.status = 301
}
-- ideally I should intercept the response body and spare the extra file read, but it seems that even with Lua this is not possible
然而,并不是每个人都接受切换到新的Web服务器。因此,我想知道是否有一种方法可以使用现成的Nginx,或者更好的方法是使用大多数/所有Web服务器都支持的通用方法。
由于服务器端包括(有没有办法从文件中检索ssi变量并将其设置为头。
没有内置的方法从SSI设置HTTP标头,但您可以使用CGI程序来实现这一点。