How to make haproxy rewrite a url while retaining a variable that is the middle of the path

haproxyregex

I'm trying to redirect a url that looks like http://host/api/getThingByID/12345 to http://host/api/addr/12345/getThing

Unfortunately, regsub() does not support capture groups. I was going to try to work around this by just calling it twice, once to rewrite the url up to the id, and then again to replace /$ with /getThing, but I can't figure out how to call the function twice in one redirect rule.

Best Answer

After much experimentation, I came up with a solution. You can just chain regsub() back to back, with a rule like:

http-request redirect code 301 location %[url,regsub(^/api/getThingByAddr,/api/addr/,),regsub($,/getThing,)] if { path_beg /api/getThingByAddr }