2017-12-18 10 views
0

Szenario: Wenn URL http://domain oder http://domain/web ist, dann sollte es keine Umleitung geben. Für alles andere, sagen wir http://domain/abc oder http://domain/xyz, sollte es eine Umleitung zu http://domain2 geben.HAProxy Routing basierend auf URL

Dies ist, was ich versucht habe und es funktioniert nur für http://domain/web. Wenn die URL http://domain lautet, wird sie immer noch an http://domain2 weitergeleitet.

acl is_root path -i 
acl missing_slash path_reg ^/*/[^/]*$$ 
acl isweb path_beg /web 
http-request set-header X-Location-Path %[capture.req.uri] if !isweb !is_root !missing_slash 
http-request replace-header X-Location-Path [^/]+/(.*) \1 if !isweb !is_root !missing_slash 
http-request redirect code 301 location https://www.domain2.com%[hdr(X-Location-Path)] if !isweb !is_root !missing_slash 

Antwort

0

Übereinstimmungszeichenfolge /.

acl is_root path -m str/

Der Anfrage-URI kann niemals eine leere Zeichenfolge in HTTP sein. Der Browser sendet immer GET/HTTP/1.1, unabhängig davon, ob die Adressleiste nach dem Hostnamen tatsächlich / anzeigt.

+0

Leider immer noch das gleiche Ergebnis nach dieser Änderung –

+0

Ihr 'missing_slash' Test scheint ungültig zu sein. Ich bin mir nicht sicher, was Sie damit anfangen wollen, aber '*' in einer Regex bedeutet "null oder mehr Vorkommen", also scheint dies mit '/' übereinzustimmen, wodurch verhindert wird, dass die andere Regel wirksam wird. Sie haben vielleicht 'path_reg [^ /] $' gemeint - Pfad endet nicht mit einem Schrägstrich - oder 'path_reg^/. +/[^ /] + $'. Bitte erklären Sie, mit welchem ​​Muster dieses Muster übereinstimmen soll. –

+0

Meine Regex ist sehr schlecht. Das ist was ich herausfinden möchte ... wenn eine URL wie diese ist www.mydomain.com oder www.mydomain.com/web. Anders als bei diesen beiden Bedingungen erfolgt die Weiterleitung zu Domäne2. –

Verwandte Themen