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

sundogbrew's avatar
sundogbrew
Icon for Altocumulus rankAltocumulus
Oct 04, 2017

IRule for redirect based on url

I am trying to do a irule redirect for urls. I am trying to trick something for a DR situation. I have a redirect service that is off campus. So for my DR situation I have a closed off network. I trick the DNS with a dns translation on my firewall and point the three different hosts to the same IP on the F5. I created a VIP on that IP and am trying to write and IRule that will redirect based on the URL you think you came from.

 

So if I goto the dns redirects me to 1.1.1.1 on my F5 I want to redirect that to which is here one of the urls is vip-joe. I wanted to do an if else rewrite but couldn't get it to work. Tried if { [http::host] contains "darmap"} with a redirect. Really lost and tired. Any help would be greatly appreciated. Thanks Joe

 

6 Replies

  • P_K's avatar
    P_K
    Icon for Altostratus rankAltostratus

    Can you post your iRule? Mask any confidential info.

     

  • I tried three things...

        when HTTP_REQUEST {
        if { [http::host] contains "*bla*"}{
            HTTP::redirect "https://www.bla.com"
        }  elseif { [HTTP::uri] contains "*zip*"}{
            HTTP::redirect "https://www.zip.com"
        }  elseif { [HTTP::uri] equals "*stuff*"}{
            HTTP::redirect "https://stuff.com"
        } else { pool PFA_NodePool_All
        }
        }
    

    SEcond try

            when HTTP_REQUEST { 
            switch -glob [HTTP::path] {
            "vip-bla*" {
            HTTP::redirect "https://newbla.com"
            }
            "bla*" {
            HTTP::redirect "https://newbla.com"
            }
            "zip*" {
            HTTP::redirect "https://newzip.com"
            }
            "zip*" {
            HTTP::redirect "https://newzip.com"
            }
            "stuff*" {
            HTTP::redirect "https://newstuff.com"
            }
            default {HTTP::redirect "https://otherstuff.com"}
            }
            }
    

    Third try...

            when HTTP_REQUEST { 
            switch -glob [HTTP::uri]{
            "if { [HTTP::uri]contains"*bla*"}{
            HTTP::redirect "https://bla.com"
            }
            "elseif { [HTTP::uri]contains"*vip-bla*"}{
             HTTP::redirect "https://bla.com"
            }
            "elseif{ [HTTP::uri]contains"*zip*"}{
            HTTP::redirect "https://zip.com"
            }
            else {HTTP::redirect "https://otherstuff.com"}
            }
            }
    

    At the end I tried to shorten it to see if I could get anything to work, the last one won't build so there is a syntax error. If you couldn't tell already my IRule building starts with devcentral search and try to fit it to what I am doing. Thanks Joe

  • Just to correct your irules :

    First

     when HTTP_REQUEST {
        if { [string tolower [HTTP::host]] contains "bla"}{
            HTTP::redirect "https://www.bla.com"
        }  elseif { [string tolower [HTTP::uri]] contains "zip"}{ 
            HTTP::redirect "https://www.zip.com"
        }  elseif { [string tolower [HTTP::uri]] equals "stuff"}{
            HTTP::redirect "https://stuff.com"
        } else { 
           pool PFA_NodePool_All
        }
        }
    
  • Hey guys, Thanks so much for your help. The test ended on Friday and I was off yesterday. Unfortunately it ended before I was able to get this working. I was working on a lot of other problems so this could not be my main focus. But I have a base to start with for next test. I think with logging enabled I would be able to find the problem and resolve it.

     

    Thanks again. Joe