我们正在尝试从 / 重定向到 /access/signin,但是通过以下应用程序规则,我们发现 HTTPS 的重定向(循环)太多,HTTP 运行良好。
acl TEST-RDR hdr_dom(Host) -i www.test.com
acl TEST-RDR path_beg /access/signin
http-request redirect location https://www.test.com code 301 if TEST-RDR
任何建议或指示都将非常有用,我是应用程序规则的新手,正在尝试转换 F5 iRule(如下)
when HTTP_REQUEST {
set host_info [string tolower [HTTP::host]]
set uri_info [string tolower [HTTP::uri]]
switch -glob $host_info {
"www.test.com" {
switch -glob $uri_info {
"/access/signin*" {
HTTP::respond 301 Location "https://www.test.com"
}
"/*" {
HTTP::respond 301 Location "https://[HTTP::host][HTTP::uri]"
}
}
}
"*.test.com" {
switch -glob $uri_info {
"/access/signin*" {
HTTP::redirect "https://[HTTP::host][HTTP::uri]"
}
}
}
}
}
答案1
在 haproxy 中声明acl
两次实际上意味着OR
这些条件,因此这样:
acl TEST-RDR hdr_dom(Host) -i www.test.com
acl TEST-RDR path_beg /access/signin
意味着Host = www.test.com
ORpath_beg /access/signin
一直计算为真,因为您重定向到同一个域,所以https://www.test.com/
重定向到https://www.test.com/
并且您得到重定向循环。
尝试以下方法:
acl host_www.test.com hdr_dom(host) -i www.test.com
acl url_access_signin path_beg /access/signin
http-request redirect location https://www.test.com/ code 301 if host_www.test.com url_access_signin
HaproxyAND
在构建上述条件时具有隐式功能http-request
。我不了解 F5,所以我不能说这是否是准确的翻译。