Forum Discussion

DM_5174's avatar
DM_5174
Icon for Nimbostratus rankNimbostratus
Nov 07, 2007

Case-sensitive URL Redirection

Hello all,

 

 

I have created a 4x iRule that will redirect based on specific

 

words after the FQDN "http://%h/". So if i put "http://www.primarysite.com",

 

i get redirected to the main page, however if you enter "home" or "HOME" (lower case or upper case), it redirects you to the secondary site.

 

 

The quesion here is: Can I use RegEX, for example /[H][h][O][o][M][m][E][e]

 

in the code so to consolidate so i don't have to use two "if" statements?

 

By doing this, the user can put any of the combo upper or lower and still

 

get the same result, which is a redirection to "http://www.secondarysite.com/secure".

 

 

 


if (http_host == "www.primarysite.com" and http_uri == "/home") {
   redirect to "www.secondarysite.com/secure/"
}
else {
   if (http_host == "www.primarysite.com" and http_uri == "/HOME") {
      redirect to "www.secondarysite.com/secure/"
   }
   else {
      use pool APACHE_WEB_SERVERS
   }
}

 

 

 

Thank you!

 

4 Replies

  • hoolio's avatar
    hoolio
    Icon for Cirrostratus rankCirrostratus
    Hello,

     

     

    If you're running 4.6.x, you can use the tolower function to set the URI to lowercase before doing the string comparison. Else, in previous versions, you can use matches_regex.

     

     

    tolower:

     

     

    if ((tolower(http_host)) == "www.primarysite.com" and (tolower(http_uri) == "/home")){

     

     

    matches_regex:

     

     

    if (http_host matches_regex "(?i:www.primarysite.com)" and http_uri matches_regex "(?i:/home)"){

     

     

    The ?i: portion of the regex enables a case-insensitive comparison and doesn't capture the matching string into a backreference.

     

     

    I haven't tested the i flag, but it's a standard regex option so I expect it would work. If not, you could use the [hH][oO][mM][eE] approach.

     

     

    Aaron
  • I have tried the "i" switch and it does not work for the irule version i am running. I have tried the other approach and came up with a 404 error. I think the syntax is incorrect...Can you let me know if this is correct?

    Thanks again!

    
    if (http_host == "www.primarysite.com" and http_uri == "/[hH][oO][mM][eE]") {   
    redirect to "www.secondarysite.com/secure/"
    }
    else {      
    use pool APACHE_WEB_SERVERS   
    }

  • hoolio's avatar
    hoolio
    Icon for Cirrostratus rankCirrostratus
    I assume you're getting a 404 because the request is for /home and that doesn't exist on the web servers in the apache pool.

    Instead of ==, try using matches_regex. Also, you should specify the protocol in the redirect.

    
    if (http_host == "www.primarysite.com" and http_uri matches_regex "/[hH][oO][mM][eE]") {   
       redirect to "https://www.secondarysite.com/secure/"
    } else {      
       use pool APACHE_WEB_SERVERS   
    }

    Aaron
  • Awesome! that worked!

     

     

    Thanks for the help Aaron!

     

     

    -Anhtuan