Forum Discussion

NathPras's avatar
NathPras
Icon for Cirrus rankCirrus
Sep 22, 2022

URL/URI rewrite without changing in Client browser

Hello All Experts, Greetings!   I have an issue where I need to rewrite URL and as well as URIs from https://abc.com/xyz to https://pqr.com/mnp. I found two ways to do that one I can use a profil...
  • Kevin_Stewart's avatar
    Kevin_Stewart
    Oct 06, 2022

    I'd maybe argue that partitions aren't create separate logical BIG-IPs. It's more about building separate administrative domains on a single BIG-IP. Further, partitions can always access the /Common partition. To answer your question though, it depends on the level of isolation, but you should simply be able to point to the VIP in the oter partition,

    virtual "/abc-app-dev/np-api-vip"
    
    or 
    
    virtual "/Common/abc-app-dev/np-api-vip"

    You don't need SNAT to communicate between VIPs on the same BIG-IP.

  • NathPras's avatar
    NathPras
    Dec 08, 2022

    Hi Kevin,

    Thanks for your guidance. Here is what I figured out and it is working now. All happened due to your idea so thanks again.

     

    IRule for same routing domain :-

     

    when HTTP_REQUEST {
    log local0. "Incoming request: [HTTP::host]:[HTTP::uri]"
    if { [set match [class match -value -- "[HTTP::host]:[HTTP::uri]" starts_with datagroup_Name]] ne "" } {
    log local0. "Datagroup match: $match"
    ## Get first URI path in client request
    set FIRSTPATH [getfield [HTTP::path] "/" 2]

    ## Split match into host and path
    set matchlist [split $match ":"]
    set MATCHHOST [lindex $matchlist 0]
    set MATCHPATH [lindex $matchlist 1]

    ## Replace FIRSTPATH with MATCHPATH (from full HTTP::uri)
    set UPDATEDPATH [string map [list "/$FIRSTPATH" "$MATCHPATH"] [HTTP::uri]]
    log local0. "Updated host: $MATCHHOST"
    log local0. "Updated path: $UPDATEDPATH"

    HTTP::host $MATCHHOST
    HTTP::uri $UPDATEDPATH

    virtual "/path/virtual_server_name"


    }
    }

     

    For different route domain 

     

    when HTTP_REQUEST {
    log local0. "Incoming request: [HTTP::host]:[HTTP::uri]"
    if { [set match [class match -value -- "[HTTP::host]:[HTTP::uri]" starts_with datagroup_name]] ne "" } {
    log local0. "Datagroup match: $match"
    ## Get first URI path in client request
    set FIRSTPATH [getfield [HTTP::path] "/" 2]

    ## Split match into host and path
    set matchlist [split $match ":"]
    set MATCHHOST [lindex $matchlist 0]
    set MATCHPATH [lindex $matchlist 1]

    ## Replace FIRSTPATH with MATCHPATH (from full HTTP::uri)
    set UPDATEDPATH [string map [list "/$FIRSTPATH" "$MATCHPATH"] [HTTP::uri]]
    log local0. "Updated host: $MATCHHOST"
    log local0. "Updated path: $UPDATEDPATH"

    HTTP::host $MATCHHOST
    HTTP::uri $UPDATEDPATH

    pool pool_name


    }
    }