Forum Discussion
hooleylist
Jul 06, 2010Cirrostratus
In theory, the Host header could be set by the client in upper, lower or mixed case and the server must interpret it with out case sensitivity. So to follow RFC2616, you should actually set the Host header value to lower case before checking it. In practice, all major browsers set the Host header value to lower case. I think most applications would be case sensitive for the query string. For IIS, the path isn't case sensitive.
Charles, you might want to change "contains" to starts with:
when HTTP_REQUEST {
log local0. "[IP::client_addr]:[TCP::client_port]: [HTTP::method] to [HTTP::host][HTTP::uri]"
Check if domain is "www.domain.com"
if {[string tolower [HTTP::host]] eq "ww2.domain.com"}{
Check if URI doesn't start with /directory
if {[string tolower [HTTP::path]] starts_with "/directory"} {
log local0. "[IP::client_addr]:[TCP::client_port]: Allowing request through"
Exit this event from this iRule
return
}
}
Redirect everything else to HTTPS
HTTP::redirect "https://[getfield [HTTP::host] ":" 1][HTTP::uri]"
log local0. "[IP::client_addr]:[TCP::client_port]: Redirecting request"
}
If there are still issues with this iRule, you can check the log output from /var/log/ltm to see what the iRule is doing.
Aaron