Nfordhk_66801
Aug 14, 2014Nimbostratus
iRule redirect to HTTPS - Logical Error
Hi,
I have a logical error in my iRule. We only want to encrypt specific URLs. We have a site that hosts multiple applications.
Part One: http://websiteROOT/websiteA - websiteE redirect to their HTTP pool, success
Part Two: http://websiteROOT/websiteF, since it is not defined in the iRule redirects to HTTPS, success
Part Three: We want http://websiteROOT to redirect to HTTPS as well, failed
when HTTP_REQUEST {
if {[ string tolower [HTTP::uri]] starts_with "/websiteA" } {
pool pool_websiteA
} elseif {[ string tolower [HTTP::uri]] starts_with "/websiteB" } {
pool pool_websiteB
} elseif {[ string tolower [HTTP::uri]] starts_with "/websiteC" } {
pool pool_websiteC
} elseif {[ string tolower [HTTP::uri]] starts_with "/websiteD" } {
pool pool_websiteD
} elseif {[ string tolower [HTTP::uri]] starts_with "/websiteE" } {
pool pool_websiteE
} elseif {[ string tolower [HTTP::host]] equals "websiteROOT" } {
HTTP::redirect "https://[HTTP::host][HTTP::uri]"
} else {HTTP::redirect "https://[HTTP::host][HTTP::uri]"}
}
Well, that elseif as it's currently written will never match because you're converting the host to lowercase and then attempting to match it against a string with upper case characters (websiteROOT). I realize this is a sanitized iRule, but I just wanted to raise this point in case that is your issue. Try this one:
when HTTP_REQUEST { if { [string tolower [HTTP::uri]] starts_with "/websiteA" } { pool pool_websiteA } elseif { [string tolower [HTTP::uri]] starts_with "/websiteB" } { pool pool_websiteB } elseif { [string tolower [HTTP::uri]] starts_with "/websiteC" } { pool pool_websiteC } elseif { [string tolower [HTTP::uri]] starts_with "/websiteD" } { pool pool_websiteD } elseif { [string tolower [HTTP::uri]] starts_with "/websiteE" } { pool pool_websiteE } else { HTTP::redirect "https://[HTTP::host][HTTP::uri]" } }