清漆重定向循环(尝试将非www发送到www)

时间:2014-12-17 12:47:39

标签: wordpress apache redirect varnish

我正在尝试将没有'www'的请求重定向到Varnish中的www.mydomain.com(WordPress网站),但由于某种原因,只能创建无限循环的重定向。在我的Varnish vcl中我有:

sub vcl_recv {
    if (req.http.host == "example.com") {
        set req.http.host = "www.example.com";
        error 750 "http://" + req.http.host + req.url;
    }

    ...

sub vcl_error {
    if (obj.status == 750) {
        set obj.http.Location = obj.response;
        set obj.status = 301;
        return(deliver);
    }
}

(这取自我在网上看到的例子)。在Fiddler中,回应似乎表明Varnish做了正确的事情:

HTTP/1.1 301 http://www.example.com/
Server: Varnish
Location: http://example.com/
Accept-Ranges: bytes
Date: Wed, 17 Dec 2014 12:42:56 GMT
X-Varnish: 1488505994
Age: 0
Via: 1.1 varnish
Connection: close

但是,它会一直循环直到浏览器放弃。我在俯瞰什么?任何提示都非常感激。

托比

1 个答案:

答案 0 :(得分:1)

似乎你正在使用Varnish< 4,因为4中的语法有些不同。

但问题是,即使你的vcl似乎是正确的,日志似乎也显示相反的事情,http://www.example.com/被重定向到http://example.com/的请求,后来你说你的主要域名是www。 vcl和wordpress不同意主域名。

确保您正在重新加载并使用正确的vcl,并确保您已在vcl中编写了正确的主机并且该wordpress同意。

如果找不到问题,请显示varnishlog跟踪。