У меня есть приложение, которое было переименовано, и я хочу, чтобы Haproxy перенаправлял на правильный путь, сохраняя параметры запроса.
Вот что у меня есть:
acl old_name path_dir -i /old_name
http-request set-path /new_name/%[query] if old_name
Я хочу изменить с
www.site.com/old_name/Default.aspx?Id=123
к
www.site.com/new_name/Default.aspx?Id=123 but this is not working.
С HAProxy 1.5: используйте временный заголовок, чтобы построить новый путь из существующего в запросе, а затем напрямую выполнить перенаправление
# Clean the request and remove any existing header named X-Rewrite
http-request del-header X-REWRITE
# Copy the full request URL into X-Rewrite unchanged
http-request add-header X-REWRITE %[url] if { path_beg /old_path }
# Change the X-REWRITE header to contain out new path
http-request replace-header X-REWRITE ^/old_path(/.*)?$ /new_path\1 if { hdr_cnt(X-REWRITE) gt 0 }
# Perform the 301 redirect
http-request redirect code 301 location http://%[hdr(host)]%[hdr(X-REWRITE)] if { hdr_cnt(X-REWRITE) gt 0 }
В HAProxy 1.6 используйте фильтр regsub
http-request redirect code 301 location http://%[hdr(host)]%[url,regsub(^/old_path,/new_path,)] if { path_beg /old_path }
источник среди другие полезные фрагменты конфигурации
Более подробная информация доступна в Документация HAProxy для ключевого слова regsub.
Ты сбиваешь с толку перенаправление URL с участием переписывание URL на бэкэнд.
Если вы даже хотите переписать, то согласно документации haproxy 1.6:
- "set-path" перезаписывает путь запроса с результатом оценки строки формата. Строка запроса, если таковая имеется, остается неизменной.
Итак, правильная конфигурация в таком случае было бы :
acl old_name path_dir -i /old_name
http-request set-path /new_name if old_name
Чтобы перенаправить Пользователь :
redirect location /new_name if old_name
Для всех, кто пытается внести изменения с uri в REST API, не использовать место перенаправления http-запроса потому что данные заголовка потеряны. Использовать http-запрос set-uri.
http-request set-uri% [url,regsub(^/old,/new,)] if { path_beg /old }