redirect location <to> [code <code>] <option> [{if | unless} <condition>]
redirect prefix <to> [code <code>] <option> [{if | unless} <condition>]
The author also provides a description about how 2 redirect rules work
With "redirect location", the exact value in <to> is placed into
the HTTP "Location" header. In case of "redirect prefix", the
"Location" header is built from the concatenation of <to> and the
complete URI, including the query string, unless the "drop-query"
option is specified (see below). As a special case, if <to>
equals exactly "/" in prefix mode, then nothing is inserted
before the original URI. It allows one to redirect to the same
URL.
For example, when you define an acl (access control list) in haproxy likes this:
acl right_request hdr_sub(cookie) -i Human=1
redirect prefix http://www.oursite.com/?lt=verify code 302 if !right_request
With configuration above, what we want is once a request without cookie Human with value=1 will be redirect to page: http://www.oursite.com/?lt=verify to check for human and set right cookies. But it will not work as expected.
A request header looks like this:
GET / HTTP/1.0
User-Agent: Wget/1.12 (linux-gnu)
Accept: */*
Host: www.google.com.vn
Connection: Keep-Alive
As haproxy document describes, a redirect prefix rule will concate the <to> path with the complete URI which is "/" in http header in our example. Back to redirect prefix rule, it will redirect and rewrite the URL to:
http://www.oursite.com/?lt=verify/
and for sure, that URL is not exist.
How to make that rule works? Just replace prefix with location.
*My note when using haproxy*
No comments:
Post a Comment