2017-12-18 29 views
0

시나리오 : URL이 http://domain 또는 http://domain/web 인 경우 리디렉션이 있어서는 안됩니다. 그 외의 경우 http://domain/abc 또는 http://domain/xyz이라고 말하면 http://domain2으로 리디렉션되어야합니다.URL 기반 HAProxy 라우팅

이것은 시도한 것이지만 http://domain/web에서만 작동합니다. URL이 http://domain이면 여전히 http://domain2으로 리디렉션됩니다.

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 

답변

0

일치 문자열 /.

acl is_root path -m str/

요청 URI는 실제로 HTTP에서 빈 문자열 일 수 없습니다. 호스트 이름 뒤에 주소 표시 줄에 실제로 /이 표시되는지 여부에 관계없이 브라우저는 항상 GET/HTTP/1.1을 보냅니다.

+0

불행히도 이번 변경 이후의 결과는 같습니다. –

+0

'missing_slash' 테스트가 유효하지 않은 것으로 보입니다. 당신이 무엇을 하려는지 확실하지 않지만 정규 표현식에서'*'는 "0 번 이상 발생"을 의미하므로'/'와 일치하는 것으로 보이므로 다른 규칙이 적용되지 않습니다. 'path_reg [^ /] $'- 경로가 슬래시 또는'path_reg^/. +/[^ /] + $'로 끝나지 않을 것입니다. 그 패턴이 어울리는 것을 설명하십시오. –

+0

정규 표현식이 매우 형편 없습니다. 이것은 내가 알고 싶은 것입니다 ... URL이 www.mydomain.com 또는 www.mydomain.com/web와 같은 경우. 이 두 가지 조건 이외에는 도메인 2로 리디렉션됩니다. –