如何使用Varnish将所有子URL重定向至主页面
Varnish实现example.com所有路径重定向至根域名
你的现有代码缺少对请求路径的判断,会导致根路径也被不必要地重定向。以下是两种可行的实现方案:
方案一:直接返回重定向(推荐)
在vcl_recv阶段直接处理,代码简洁直观:
sub vcl_recv { # 排除本地IP,避免内部请求/测试被重定向 if (client.ip != "127.0.0.1" && req.http.host == "example.com" && req.url != "/") { return(redirect "https://example.com/" 301); } }
- 新增
req.url != "/"判断,避免根路径本身触发重定向 return(redirect ... 301)直接返回标准301永久重定向响应,无需额外处理错误阶段
方案二:基于自定义错误码处理(兼容原有写法)
如果坚持使用自定义错误码的方式,需要在vcl_error阶段补充重定向逻辑:
sub vcl_recv { if (client.ip != "127.0.0.1" && req.http.host == "example.com" && req.url != "/") { set req.http.x-redir = "https://example.com/"; error 850 "Moved Permanently"; } } sub vcl_error { if (obj.status == 850) { set obj.http.Location = req.http.x-redir; set obj.status = 301; return(deliver); } }
- 在
vcl_error中将自定义错误码850转换为标准301重定向,同时设置Location响应头
内容的提问来源于stack exchange,提问作者Some DevOps Guy
相关产品推荐
相关产品推荐

