Okay, figured this out.
in vcl_recv I check req.http.Host, and if it's wrong, I set it correctly
and throw 751, then in vcl_error:
if(obj.status == 751) {
# redirect
set obj.http.Location = "http://" req.http.Host req.url;
set obj.status = 301;
This seems to work. Can anybody see any problems? Is it bad to set
req.http.Host? Will that string concatenation above always be well formed?
Thanks,
Chris
On 2010/09/14 10:56, Chris Hecker wrote:
But the req.url doesn't seem to have the domain name in it, which is
what I want to redirect...
Chris
On 2010/09/14 10:46, Caunter, Stefan wrote:
You need to tell the browser the new location in vcl_error. I have
something similar for mobile redirects.
First in vcl_recv catch the event:
if( ... some condition ... ) {
set req.url = regsub(req.url, "(.*)",
"/mobile\1");
error 750 "Moved Temporarily";
}
Then handle it in vcl_error:
if (obj.status == 750) {
set obj.http.Location = req.url;
set obj.status = 302;
return(deliver);
}
You can specify obj.status = 301 of course.
Stefan Caunter :: Senior Systems Administrator :: TOPS
e: [email protected] :: m: (416) 561-4871
www.thestar.com www.topscms.com
-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of Michael
Alger
Sent: September-11-10 5:52 AM
To: [email protected]
Subject: Re: regsub in error response
On Fri, Sep 10, 2010 at 10:12:59AM -0700, Chris Hecker wrote:
I'd like to do a 301 from a.com to b.com, but preserving the whole
url, but I can't figure out how to do it. This doesn't work to
send it to vcl_error:
error 751 regsub(req.url,"a.com","b.com");
The regsub isn't allowed there. Can I stuff it in a header that I
can get in vcl_error?
You probably can. What I do for redirects is to rewrite the req.url
and then use that in the error statement, i.e.
set req.url = regsub (req.url, "rewritefrom", "rewriteto");
error 751 req.url;
For your particular case where you don't actually want to rewrite
the URL but instead only change the host part of it, I would do
something like:
if (req.url ~ "(?i)^/vanitypath")
{
set req.url = "http://b.com" req.url;
error 751 req.url;
}
Note that the host isn't present in req.url (use req.http.Host for
that) - so in the first example, "rewriteto" should start with a
full protocol specification (http://...").
Most browsers work fine if they're told to redirect to /foo, but I
don't really like relying on it.
_______________________________________________
varnish-misc mailing list
[email protected]
http://lists.varnish-cache.org/mailman/listinfo/varnish-misc
_______________________________________________
varnish-misc mailing list
[email protected]
http://lists.varnish-cache.org/mailman/listinfo/varnish-misc
_______________________________________________
varnish-misc mailing list
[email protected]
http://lists.varnish-cache.org/mailman/listinfo/varnish-misc