J'ai une application qui a été renommée et je veux que Haproxy redirige vers le bon chemin tout en préservant les paramètres de demande
Voici ce que j'ai:
acl old_name path_dir -i /old_name
http-request set-path /new_name/%[query] if old_name
Je veux que ça change de
www.site.com/old_name/Default.aspx?Id=123
à
www.site.com/new_name/Default.aspx?Id=123 but this is not working.
Avec HAProxy 1.5: utilisez un en-tête temporaire pour créer un nouveau chemin à partir de celui existant dans la demande, puis effectuez directement une redirection
# 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 }
Dans HAProxy 1.6, utilisez le filtre regsub
http-request redirect code 301 location http://%[hdr(Host)]%[url,regsub(^/old_path,/new_path,)] if { path_beg /old_path }
source parmi autres extraits de configuration utiles
Plus d'informations sont disponibles dans la documentation HAProxy pour le mot clé regsub .
Vous confondez la redirection d'URL avec la réécriture d'URL vers le backend.
Si vous souhaitez même réécrire , alors selon la documentation haproxy 1.6:
- "set-path" réécrit le chemin de la requête avec le résultat de l'évaluation de la chaîne de format. La chaîne de requête, le cas échéant, est laissée intacte.
Donc la configuration correcte dans ce cas serait:
acl old_name path_dir -i /old_name
http-request set-path /new_name if old_name
Pour rediriger l'utilisateur:
redirect location /new_name if old_name
Pour toute personne essayant de modifier l'URI en REST, n'utilisez pas l'emplacement de redirection de demande http car les données d'en-tête sont perdues. Utilisez http -request set-uri.
http-request set-uri% [url,regsub(^/old,/new,)] if { path_beg /old }