Forum Discussion

Jonathan_Scholi's avatar
Jonathan_Scholi
Icon for Cirrostratus rankCirrostratus
Oct 28, 2010

String map and redirect

I need to perform a redirect that changes a URI from this format:

 

 

mysite.com/it/folder/files/FILESANDFILES

 

 

to:

 

 

mysite.com/it/folder/files/filesANDfiles

 

 

In other words, part of the URI needs to be converted to lowercase, while leaving an intermediate portion intact. Since the portion that needs to be converted to lowercase is very specific, I tried using a string map as follows:

 

 

when HTTP_REQUEST {

 

if { [string tolower [HTTP::path]] starts_with "/it/folder/files" }

 

{

 

HTTP::redirect [string map {"folder=FILESANDFILES" "folder=filesANDfiles"} [HTTP::path]]

 

}

 

}

 

 

This doesn't work, even though it's very similar to other iRules I've used that do work. Any thoughts?

 

3 Replies

  • I found the problem, an infinite loop is created by this iRule since the iRule is not case sensitive enough. Removing "tolower" does not solve the problem. I don't have a solution though.

     

  • Solved:

     

     

    when HTTP_REQUEST { if { [string tolower [HTTP::path]] starts_with "/it/folder/files" and [HTTP::uri] contains "folder=FILESANDFILES"} { HTTP::redirect [string map {"folder=FILESANDFILES" "folder=filesANDfiles"} [HTTP::uri]] } }
  • Nice work. You could make it a little more precise if you looked for the folder parameter name and value in just the query as opposed to the full URI:

    
    when HTTP_REQUEST {
       if { [string tolower [HTTP::path]] starts_with "/it/folder/files" and [HTTP::query] contains "folder=FILESANDFILES"} { 
          HTTP::redirect [string map {"folder=FILESANDFILES" "folder=filesANDfiles"} [HTTP::uri]]
       }
    }
    

    Aaron