Forum Discussion

slomah_85788's avatar
slomah_85788
Icon for Nimbostratus rankNimbostratus
Jun 10, 2009

Appending iRule

Hi,

 

I have requested to create iRule which will add appending to url, as the customer will write (http://mycompany.com ) and the application won’t work unless you write the following (http://mycompany.com/test/app.aspx )

 

 

1) I created the following irule but the pictures on the page doesn’t appear

 

 

when HTTP_REQUEST {

 

if { not ([HTTP::uri] starts_with "/test") } {

 

HTTP::uri /test/app.aspx [HTTP::uri]

 

}

 

}

 

 

2) I used redirection irule like this and it works but I don’t know if this will affect the application

 

 

when HTTP_REQUEST {

 

if {

 

[HTTP::uri] equals "" or [HTTP::uri] equals "/" } {

 

HTTP::redirect http://mycompany.com/test/app.aspx }}

 

 

 

I would like if someone help me in No.1 to make work.

5 Replies

  • For the first iRule, let's say your incoming URI is "/foobar". You are resetting the URI to the "/test/app.aspx /foobar". I'm assuming that isn't what you want to do. If you just want to change the URI to /test/app.aspx" then leave out your trailing [HTTP::uri] from the assignment.

     

    -Joe
  •  

    You mean to remove [HTTP::uri] and make like this:

     

     

    when HTTP_REQUEST {

     

    if { not ([HTTP::uri] starts_with "/test") } {

     

    HTTP::uri /test/app.aspx

     

    }

     

    }

     

     

    But this gives the same results as the pictures didn’t appear.
  • If you just want to rewrite requests to the root document (path equals /), you could use this:

      
     when HTTP_REQUEST {  
         Check if path is /  
        if {[HTTP::path] eq "/"}{  
      
            Rewrite path to /test/app.aspx 
           HTTP::path "/test/app.aspx"  
        }  
     }  
     

    If you want to prepend a string to all URIs if it's not there already, you can use a rule like this:

      
     when HTTP_REQUEST {  
         Check if path doesn't already start with /test/ 
        if { not ([HTTP::path] starts_with "/test/")}{  
      
            Rewrite path by prepending "/test/" 
           HTTP::path "/test/[HTTP::path]"  
        }  
     }  
     

    Note that if you don't care about inspecting the query string it should be more efficient to modify just the path using HTTP::path.

    Aaron
  • All,

     

    I have an append/redirect question.

     

    Right now I am doing a straight redirect based on two different paths, but now my users want to add arguments to the paths how can I do this? Below is the current rule and an example of the url the users are trying to use.

     

     

    when HTTP_REQUEST {

     

    if { [HTTP::uri] equals "/dev" } {

     

    log local0. "Found the uri /"

     

    HTTP::redirect "https://www.server1.com:4444/dev"

     

    }

     

    if { [HTTP::uri] equals "/test" } {

     

    log local0. "Found the uri /"

     

    HTTP::redirect "https://www.server1.com:4444/test"

     

    }

     

    }

     

     

    so basically the redirection takes you to the apache server running on 4444 instead of 443, but the question is if a user hit https://www.server1.com/test/USERNAME -or- https://www.server1.com/dev/PROJECT the redirect takes them to the mainpage (since that is what the rule tells it to do), but how can I grab the PROJECT code or the USERNAME and pass that to the redirect or append it to the redirect?

     

     

    Thanks,

     

    Matt
  • Hi Matt,

     

     

    It would help if you created a new post for your question. You can parse the fields in the path using getfield:

     

     

    [getfield "/path1/path2/path3" "/" 3] returns path2

     

     

    So [getfield [HTTP::path] "/" 3] for a request to /test/USERNAME would return USERNAME.

     

     

    If you create a new post, can you add a few examples of what you'd like the original and modified requests to look like?

     

     

    Thanks,

     

    Aaron