Forum Discussion
Joe_Pipitone
Nimbostratus
Oct 05, 2015Bypass SSL redirect if URI is....
I have 2 set of iRules that I'd like to combine into 1, however I'm unable to apply the logic without the result ending up in a loop.
The end result needs to be - if the URI is "/articles/2015/09/0...
Brad_Parker
Cirrus
Oct 06, 2015Looks like you used "TCP::remote_port" in your first if. That is what caused your loop since its not being matched. Try this:
when HTTP_REQUEST {
if { [TCP::local_port] eq 80 && !([string tolower [HTTP::uri]] eq "/articles/2015/09/09/something.aspx") }
{
HTTP::redirect https://[getfield [HTTP::host] ":" 1][HTTP::uri]
}
elseif { [TCP::local_port] eq 443 && [string tolower [HTTP::uri]] eq "/articles/2015/09/09/something.aspx" } {
HTTP::redirect http://[getfield [HTTP::host] ":" 1][HTTP::uri]
}
else {
HTTP::redirect https://[HTTP::host][HTTP::uri]
}
}
- Brad_ParkerOct 06, 2015
Cirrus
Also, your last else statement is not necessary and causes a loop. when HTTP_REQUEST { if { [TCP::local_port] eq 80 && !([string tolower [HTTP::uri]] eq "/articles/2015/09/09/something.aspx") } { HTTP::redirect https://[getfield [HTTP::host] ":" 1][HTTP::uri] } elseif { [TCP::local_port] eq 443 && [string tolower [HTTP::uri]] eq "/articles/2015/09/09/something.aspx" } { HTTP::redirect http://[getfield [HTTP::host] ":" 1][HTTP::uri] } } - Joe_PipitoneOct 06, 2015
Nimbostratus
Thanks - but it still results in a redirect loop. - Brad_ParkerOct 06, 2015
Cirrus
with the else removed it loops? - Joe_PipitoneOct 06, 2015
Nimbostratus
If I remove the HTTP::redirect from the last else statement, and replace it with "return" it does not loop. Traffic does not get forced to https however - as it allows the request through regardless of the port. I have to make sure the traffic is HTTPS unless it's that one particular URI. - Joe_PipitoneOct 06, 2015
Nimbostratus
Looks like it worked when I removed the last else statement - and it IS forcing HTTPS. My question is - from how I understand the logic, shouldn't it only force https IF the two are true since we're using &&? If the port is 80 AND the URI matches, then force ssl, otherwise, don't? I think this works for us. Thank you - Brad_ParkerOct 06, 2015
Cirrus
that first if is "if 80 and NOT uri" redirect. That's why it forces https in the first if.
Help guide the future of your DevCentral Community!
What tools do you use to collaborate? (1min - anonymous)Recent Discussions
Related Content
DevCentral Quicklinks
* 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
Discover DevCentral Connects
