Forum Discussion
Gortguy_105156
Nimbostratus
Aug 31, 2011Strange issue with "matches_regex" and case sensitivity
I'm a relative newbie to iRules, so please don't laugh if this is too simplistic.
I also have two environments, call them primary and test. I use essentially the same rule (copy/paste) for the two; they differ only by the pools they direct traffic to which is determined by the URI.
Here's the rule for the primary site:
when HTTP_REQUEST {
if {[HTTP::uri] matches_regex "/MyURIString" } {
pool alt_pool
} else {
pool main_pool}
}
The rule for the test site:
when HTTP_REQUEST {
if {[HTTP::uri] matches_regex "/MyURIString" } {
pool alttest_pool
} else {
pool maintest_pool}
}
The rule for the primary site works fine, regardless of the case of the URI.
ex: https://mysite.com/MyURIString/page.html = OK
https://mysite.com/MYURISTRING/page.html = OK
https://mysite.com/myuristring/page.html = OK
In the test site, however, the URL is case-sensitive:
ex: https://mytestsite.com/MyURIString/page.html = OK
https://mytestsite.com/myuristring/page.html = broken
Why would one rule require case-sensitivity while the other does not?
4 Replies
- Michael_Yates
Nimbostratus
There is a good write-up that covers case-sensitivity in the URL here: http://www.w3.org/TR/WD-html40-970708/htmlweb.html
As a general rule of thumb you should always do your compare with your data in a "known" state, so doing a string tolower will always help and make sure that the compare works.
If you change this line to this, it should resolve your problem:
if {[string tolower [HTTP::uri]] matches_regex "/myuristring" } {
What operating systems do each over your environments run on? I ask because for the most part IIS hosted Websites are case insensitive, but UNIX hosted applications are case sensitive. - Gortguy_105156
Nimbostratus
They're all IIS on the back end, so I know that isn't the case.
Thanks for the other information, though. I'll give that a try. - hoolio
Cirrostratus
You should also consider using string functions instead of regexes if you can:
if {[string tolower [HTTP::uri]] starts_with "/myuristring" } {
Aaron - naladar_65658
Altostratus
Hey Gort,
Are the BIG-IP's that you are using running two different version of TMOS or are they at different patch levels?
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
