Forum Discussion
iRule that can forward traffic based on endpoint and http-method
Hello iRule Guru
currently i have an iRule that is doing two things, 1: if the http uri has /path1/example/ or /path2/example/ the traffic should go to pool-example
2: then if host equals api.example.com replace the header with host api.newexample.com.
the above conditions are working fine but we discovered that application needs one more condition, the additional condition would be if the uri has version2/sport1 and http method is POST, forward traffic to sport pool, can you please help me to write that condition.
when HTTP_REQUEST {
if { [string tolower [HTTP::uri]] starts_with "/path1/example/" or [string tolower [HTTP::uri]] starts_with "/path2/example/"} {
pool pool-example
} elseif { [string tolower [HTTP::host]] equals "api.example.com" } {
HTTP::header replace "Host" "api.newexample.com"
pool api-newexample-com
}
}
Thanks
- spalandeNacreous
You can try below code
when HTTP_REQUEST { if { [string tolower [HTTP::host]] equals "api.example.com" } { HTTP::header replace "Host" "api.newexample.com" pool api-newexample-com return } switch -glob [string tolower [HTTP::uri]] { "/path1/example*" - "/path2/example*" { pool pool-example } "/version2/sport1*" { if { [HTTP::method] eq "POST"} { pool sport_pool } else { reject } } default { return } } }
- xuwenCumulonimbus
when HTTP_REQUEST {
if { [string tolower [HTTP::uri]] starts_with "/path1/example/" or [string tolower [HTTP::uri]] starts_with "/path2/example/"} {
pool pool-example
} elseif { [string tolower [HTTP::host]] equals "api.example.com" } {
HTTP::header replace "Host" "api.newexample.com"
pool api-newexample-com
} elseif { ([HTTP::method] eq "POST") and ([HTTP::uri] contains "version2/sport1") } {
pool sport_pool
}
}
Recent Discussions
Related Content
* Getting Started on DevCentral
* Community Guidelines
* Community Terms of Use / EULA
* Community Ranking Explained
* Community Resources
* Contact the DevCentral Team
* Update MFA on account.f5.com