Haproxy muda parte do url

3

Eu tenho um aplicativo que foi renomeado e quero que o Haproxy redirecione para o caminho correto, preservando os parâmetros de solicitação

Isso é o que eu tenho:

acl old_name path_dir -i /old_name
   http-request set-path /new_name/%[query] if old_name

Eu quero mudar de

www.site.com/old_name/Default.aspx?Id=123

para

www.site.com/new_name/Default.aspx?Id=123 but this is not working. 
    
por Hugo Marques 30.08.2016 / 15:27

2 respostas

7

Com o HAProxy 1.5: use um cabeçalho temporário para construir um novo caminho a partir do existente na solicitação e, em seguida, execute diretamente um redirecionamento

# 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 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 }

No HAProxy 1.6, use o filtro regsub

http-request redirect code 301 location http://%[hdr(host)]%[url,regsub(^/old_path,/new_path,)] if { path_beg /old_path }

fonte entre outra configuração útil snippets

Mais informações estão disponíveis na documentação do HAProxy para a palavra-chave regsub .

    
por 31.08.2016 / 11:49
4

Você está confundindo redirecionamento de URL com url reescrita para o back-end.

Se você ainda quiser reescrever , então, de acordo com a documentação do haproxy 1.6:

  • "set-path" rewrites the request path with the result of the evaluation of format string . The query string, if any, is left intact.

Assim, a configuração correta nesse caso seria:

acl old_name path_dir -i /old_name
http-request set-path /new_name if old_name

Para redirecionar o usuário:

redirect location /new_name if old_name
    
por 30.08.2016 / 19:15

Tags