Назад | Перейти на главную страницу

Haproxy изменить часть URL

У меня есть приложение, которое было переименовано, и я хочу, чтобы 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 }