For more information regarding the security incident at F5, the actions we are taking to address it, and our ongoing efforts to protect our customers, click here.

Forum Discussion

kris_52344's avatar
kris_52344
Icon for Nimbostratus rankNimbostratus
Aug 13, 2013

Need help on uri redirection i-rule

We configure below i-Rule
when HTTP_REQUEST {
    if {([HTTP::uri] starts_with "/useradmin") or ([HTTP::uri] starts_with "/sld") or ([HTTP::uri] starts_with "/nwa") or ([HTTP::uri] starts_with "/index.html") or ([HTTP::uri] starts_with "/irj/go/km/docs/documents") or ([HTTP::uri] starts_with "/monitoring/SystemInfo") or ([HTTP::uri] starts_with "/uddiclient") or ([HTTP::uri] starts_with "/webdynpro/welcome/Welcome.jsp") or ([HTTP::uri] starts_with "/wsnavigator")} {
                HTTP::redirect "https://straight2axis.axisbank.co.in/irj/portal"}

       }

However, the user's requirement now states that any incoming request only to these specific context paths:

/irj/go/km/docs/documents/AxisBank/* OR /irj/go/km/docs/documents/AxisBank/^

SHOULD NOT get redirected to the Login Page, it sholud fwd as it is

6 Replies

  • For that many If's, I'd move to a switch statement. Plus it gives you an easy way to OR conditionals. The following will redirect to the straight2axis.axisbank.co.in link. The other two requests ( I was guessing what you wanted to do with the "^" in the second URL btw. You may have to change that ) will pass through as is. All other URI's will pass through as well unless you put something in the default case. If the default case is a passthrough though, you can just omit the two "OR'd" conditions as they will do the same thing as all other URIs.

    when HTTP_REQUEST {
      switch -glob [HTTP::uri] {
        "/useradmin*" -
        "/sld*" -
        "/nwa*" -
        "/index.html*" -
        "/irj/go/km/docs/documents*" -
        "/monitoring/SystemInfo*" -
        "/uddiclient*" -
        "/webdynpro/welcome/Welcome.jsp*" -
        "/wsnavigator*" {
           HTTP::redirect "https://straight2axis.axisbank.co.in/irj/portal"    
        }
        "/irj/go/km/docs/documents/AxisBank/*" -
        "/irj/go/km/docs/documents/AxisBank/^*" {
           Do nothing - allow to pass through
        }
        default {
           TODO: Do something for all other requests here
        }
      }
    }
    

    Hope this helps...

    -Joe

  • I would first highly recommend throwing all of those URIs into a data group. So if you did that, you might try something like this:

    when HTTP_REQUEST {
       if { [string tolower [HTTP::uri]] starts_with "/irj/go/km/docs/documents/AxisBank" } {
          return
       } elseif { [class match [string tolower [HTTP::uri]] starts_with my_uri_dg] } {
          HTTP::redirect "https://straight2axis.axisbank.co.in/irj/portal"
       }
    }
    
  • hi,

    1. use switch instead of if! Its easier to read and a little bit faster. link text
    2. you have to put everything in the right order. "/irj/go/km/docs/documents/AxisBank/" will be covered by "/irj/go/km/docs/documents/". So if you want to do other things (no redirect) with every request containing AxisBank, you have to select it first.

    try this one:

        switch -glob [HTTP::uri] {
            "/irj/go/km/docs/documents/AxisBank/*" {
                 do nothing - let through
            }
            "/irj/go/km/docs/documents/*" -
            "/useradmin*" -
            "/uddiclient" -
            "..." {
                HTTP::redirect "https://straight2axis.axisbank.co.in/irj/portal"
            }
        }
    

    regards

  • Arie's avatar
    Arie
    Icon for Altostratus rankAltostratus

    Rumor has it that Switch is faster up to about 100 entries. Also, keep in mind that updating datagroups results in errors for a brief period of time. You can prevent this by first verifying that the group exists (it gets deleted and re-created during an update), but depending how the group is updated not all entries are immediately present in the datagroup.

     

  • Arie's avatar
    Arie
    Icon for Altostratus rankAltostratus

    Lastly, I noticed that you're using a 302 (Found). If you're confident that you will always want to redirect to the new URL I'd recommend a 301:

    HTTP::respond 301 Location "https://straight2axis.axisbank.co.in/irj/portal"
    
  • Hi Kris, I'm trying to do exactly the same as you want to do with this irule, does it work for you?