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?
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