Search code examples
http-redirectvarnishhttp-accept-language

Varnish redirect based on browser language settings


I am using varnish 4 in front of apache. I need requests made to deutsh.de coming from headers with the preferred language es or ca (unless it also has de or en) to be redirected to spanish.es. Could somebody provide me with the appropriate syntax? Thank you


Solution

  • So I managed to put together something in the file used to start varnish:

    sub vcl_recv {
           if((req.http.Accept-Language !~ "de" || req.http.Accept-Language !~ "en")  && (req.http.Accept-Language ~ "es" ||  req.http.Accept-Language ~ "ca" ||  req.http.Accept-Language ~ "eu"))
             {
            return(synth(301,"Moved Permanently"));
             }
    }
    
    sub vcl_synth {
          if(req.http.Accept-Language ~ "es" ||  req.http.Accept-Language ~ "ca" ||  req.http.Accept-Language ~ "eu")
             {
            set resp.http.Location = "http://spanish.es";
            return (deliver);
    }
    }
    

    ...This appears to work