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

 

  • 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