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

Anush's avatar
Anush
Icon for Nimbostratus rankNimbostratus
Sep 07, 2016

https redirection

Hi Experts,

 

Trying to figure out how this redirection can be configured.

 

https://devcentral.com/groups/Research/* should get redirected to ""https://F5.com/devresearch/*

 

"*" says whatever user type, it get populate same in redirection site

 

For example,

 

https://devcentral.com/groups/Research/F5experts get redirect to https://F5.com/devresearch/F5experts

 

this looks tricky as it has both static and variable path in URI.

 

Thanks

 

6 Replies

  • Anush's avatar
    Anush
    Icon for Nimbostratus rankNimbostratus

    how about this? looks ok?

     

    when HTTP_REQUEST {
        log local0. "Incoming URI = [HTTP::uri]"
        if { [string tolower [HTTP::host]] equals "devcentral.com" && [string tolower [HTTP::uri]] starts_with "/groups/Research/" } {
            set uri [string map -nocase {"/groups/Research/" "/devresearch/"} [HTTP::uri]]
            log local0. "New URI = $uri"
            HTTP::redirect "https://f5.com[$uri]"
        }
    }
    

     

  • This is a rough template. You may have to play around with the getfield command to achieve your requirements:

     

    when HTTP_REQUEST {
    if { ([HTTP::host] eq "devcentral.com") and ([HTTP::uri] starts_with "/groups/Research/") } {
    HTTP::respond 301 Location "https://f5.com/devresearch[getfield [HTTP::uri] "/groups/Research" 2]"
    }
    }
    

     

  • Anush's avatar
    Anush
    Icon for Nimbostratus rankNimbostratus

    minor change in above rule

     

    when HTTP_REQUEST {
        log local0. "Incoming URI = [HTTP::uri]"
        if { [string tolower [HTTP::host]] equals "devcentral.com" && [string tolower [HTTP::uri]] starts_with "/groups/Research/" } {
            set uri [string map -nocase {"/groups/Research" "/devresearch"} [HTTP::uri]]
            log local0. "New URI = $uri"
            HTTP::redirect "https://f5.com[$uri]"
        }
    }
    

     

  • Anush's avatar
    Anush
    Icon for Nimbostratus rankNimbostratus

    again minor change

     

    when HTTP_REQUEST {
        log local0. "Incoming URI = [HTTP::uri]"
        if { [string tolower [HTTP::host]] equals "devcentral.com" && [string tolower [HTTP::uri]] starts_with "/groups/Research/" } {
            set uri [string map -nocase {"/groups/Research" "/devresearch"} [HTTP::uri]]
            log local0. "New URI = $uri"
            HTTP::redirect "https://f5.com[http::uri $uri]"
        }
    }
    

     

  • Hi Anush,

    accuracy and performance wise the code below would be most effective...

     

    if { ( [HTTP::host] eq "devcentral.com" ) and ( [HTTP::path] starts_with "/groups/Research/" ) } then {
        HTTP::redirect "https://f5.com/devresearch/[string range [HTTP::uri] 17 end]"
    }
    

     

    ... almost equals (but without -NOCASE support)...

     

    if { ( [HTTP::host] eq "devcentral.com" ) and ( [HTTP::path] starts_with "/groups/Research/" ) } then {
        HTTP::redirect "https://f5.com/devresearch/[findstr [HTTP::uri] "/groups/Research/" 17 end]"
    }
    

     

    ... closely followed by a ...

     

    if { ( [HTTP::host] eq "devcentral.com" ) and ( [HTTP::path] starts_with "/groups/Research/" ) } then {
        HTTP::redirect "https://f5.com/devresearch/[string range [HTTP::uri] [string length "/groups/Research/"] end]"
    }
    

     

    ... almost equals (but without -NOCASE support) ...

     

    if { ( [HTTP::host] eq "devcentral.com" ) and ( [HTTP::path] starts_with "/groups/Research/" ) } then {
        HTTP::redirect  "https://f5.com/devresearch/[findstr [HTTP::uri] "/groups/Research/" [string length "/groups/Research/"] end]"
    }
    

     

    ... closely followed by the less accurate (the [getfield] search patter may occour multiple times and without -NOCASE support) method ...

     

    if { ( [HTTP::host] eq "devcentral.com" ) and ( [HTTP::path] starts_with "/groups/Research/" ) } then {
        HTTP::redirect "https://f5.com/devresearch/[getfield [HTTP::uri] "/groups/Research/" 2]"
    }
    

     

    ... followed by the less accurate (the [string map] search patter may occour multiple times) and less performant method ...

     

    if { ( [HTTP::host] eq "devcentral.com" ) and ( [HTTP::path] starts_with "/groups/Research/" ) } then {
        HTTP::redirect "https://f5.com[string map [list "/groups/Research/" "/devresearch/"] [HTTP::uri]]"
    }
    

     

    Update: Included the [findstr] command.

    Cheers, Kai

  • I think the below code would work best for you -

     

    if { ( [HTTP::host] eq "devcentral.com" ) and ( [HTTP::uri] starts_with "/groups/Research/" ) } then { HTTP::redirect "https://f5.com/devresearch/[string range [HTTP::uri] 17 end]" }