如何从 www 重定向到非 www 清漆

Fur*_*lon 0 varnish

如何自动将 www.example.com 类型的任何链接重定向到 example.com。

我想对所有访问 varnish 实例的链接执行此操作(因此我不必单独定义访问服务器的所有域的值)。

我尝试使用以下方法:

if(req.http.host ~ "^www\.(.+)$"){
    set req.http.host = regsub(req.http.host, "^www\.", "");
}
Run Code Online (Sandbox Code Playgroud)

它有效,但问题在于它击中了正确的后端,但它没有重定向。我从这里了解到:https : //www.varnish-cache.org/vmod/redirect您可以重定向到一个 url,但我不确定如何从 varnish 获取“完整”url 以去除 www 并重定向。

任何帮助,将不胜感激!

非常感谢!

杰森

Pat*_*gle 7

Varnish 没有用于从vcl_recv(). 相反,您必须抛出一个错误vcl_recv()才能被捕获vcl_error()。这是因为vcl_recv()无权访问响应对象。您可以阅读有关这是如何完成的。以下是我根据您的情况尝试回答的尝试。

vcl_recv()

if (req.http.host ~ "^www\.") {
  error 750 regsub(req.http.host, "^www\.(.*)", "http://\1"); //Capture everything after the www. and place it after a http://
}
Run Code Online (Sandbox Code Playgroud)

vcl_error()

if (obj.status == 750) {
    set obj.http.Location = obj.response;
    set obj.status = 302;
    return(deliver);
}
Run Code Online (Sandbox Code Playgroud)