f5_rocks
Jun 01, 2016Nimbostratus
How to expand irule using switch or logical or in selection process?
Developers want to add more "lanes" for multiple branches, so I want to add 3 more versions of "starts_with" and make the "if nots" more generic so they can apply to all the "starts_with" versions. I've never tried using switch or a logical or in the selection process before. Do either or both attempts look correct?
====================================================
abcd_redirect-http (original)
------------------------------------------
when HTTP_RESPONSE {event HTTP_REQUEST enable}
when CLIENT_ACCEPTED {event HTTP_REQUEST enable}
when HTTP_REQUEST {
set MY_HOST [string tolower [HTTP::host]]
set MY_URI [string tolower [HTTP::uri]]
if {$MY_URI starts_with "/abcd/"} {
if {not ($MY_URI starts_with "/abcd/web/abcdpayment.web/") and not ($MY_URI starts_with "/abcd/web/abcdpaymentprocessing.web/")} {
if {$MY_HOST equals "m3.corpname.com"} {
HTTP::redirect http://a1.m3.corpname.com$MY_URI
} elseif {$MY_HOST equals "intra.m3.corpname.com"} {
HTTP::redirect http://intra.a1.m3.corpname.com$MY_URI
} elseif {$MY_HOST equals "intra.m3-dc1.corpname.com"} {
HTTP::redirect http://intra.a1.m3-dc1.corpname.com$MY_URI
} elseif {$MY_HOST equals "intra.m3-dc2.corpname.com"} {
HTTP::redirect http://intra.a1.m3-dc2.corpname.com$MY_URI
} elseif {$MY_HOST equals "intra.m3-dc3.corpname.com"} {
HTTP::redirect http://intra.a1.m3-dc3.corpname.com$MY_URI
}
event HTTP_REQUEST disable
TCP::close
}
}
}
when HTTP_RESPONSE {event HTTP_REQUEST enable}
====================================================
abcd_redirect-http (trying switch -glob)
------------------------------------------
when HTTP_RESPONSE {event HTTP_REQUEST enable}
when CLIENT_ACCEPTED {event HTTP_REQUEST enable}
when HTTP_REQUEST {
set MY_HOST [string tolower [HTTP::host]]
set MY_URI [string tolower [HTTP::uri]]
switch -glob $MY_URI {
"/abcd/"-
"/abcd_lane2"-
"/abcd_hotfix" {
if {not ($MY_URI contains "/web/abcdpayment.web/") and not ($MY_URI contains "/web/abcdpaymentprocessing.web/")} {
if {$MY_HOST equals "m3.corpname.com"} {
HTTP::redirect http://a1.m3.corpname.com$MY_URI
} elseif {$MY_HOST equals "intra.m3.corpname.com"} {
HTTP::redirect http://intra.a1.m3.corpname.com$MY_URI
} elseif {$MY_HOST equals "intra.m3-dc1.corpname.com"} {
HTTP::redirect http://intra.a1.m3-dc1.corpname.com$MY_URI
} elseif {$MY_HOST equals "intra.m3-dc2.corpname.com"} {
HTTP::redirect http://intra.a1.m3-dc2.corpname.com$MY_URI
} elseif {$MY_HOST equals "intra.m3-dc3.corpname.com"} {
HTTP::redirect http://intra.a1.m3-dc3.corpname.com$MY_URI
}
event HTTP_REQUEST disable
TCP::close
}
}
}
when HTTP_RESPONSE {event HTTP_REQUEST enable}
===============================================================
abcd_redirect-http (trying logical or ||)
------------------------------------------
when HTTP_RESPONSE {event HTTP_REQUEST enable}
when CLIENT_ACCEPTED {event HTTP_REQUEST enable}
when HTTP_REQUEST {
set MY_HOST [string tolower [HTTP::host]]
set MY_URI [string tolower [HTTP::uri]]
if {$MY_URI starts_with "/abcd/" || $MY_URI starts_with "/abcd_lane2/" || $MY_URI starts_with "/abcd_hotfix/" } {
if {not ($MY_URI contains "/web/abcdpayment.web/") and not ($MY_URI contains "/web/abcdpaymentprocessing.web/")} {
if {$MY_HOST equals "m3.corpname.com"} {
HTTP::redirect http://a1.m3.corpname.com$MY_URI
} elseif {$MY_HOST equals "intra.m3.corpname.com"} {
HTTP::redirect http://intra.a1.m3.corpname.com$MY_URI
} elseif {$MY_HOST equals "intra.m3-dc1.corpname.com"} {
HTTP::redirect http://intra.a1.m3-dc1.corpname.com$MY_URI
} elseif {$MY_HOST equals "intra.m3-dc2.corpname.com"} {
HTTP::redirect http://intra.a1.m3-dc2.corpname.com$MY_URI
} elseif {$MY_HOST equals "intra.m3-dc3.corpname.com"} {
HTTP::redirect http://intra.a1.m3-dc3.corpname.com$MY_URI
}
event HTTP_REQUEST disable
TCP::close
}
}
}
when HTTP_RESPONSE {event HTTP_REQUEST enable}
===============================================================