Forum Discussion

farache_28983's avatar
farache_28983
Icon for Nimbostratus rankNimbostratus
Sep 05, 2012

Rewrite to URL and strip part of the URI

Hi guys,

 

Basically i need to do this.. been testing different scenarios with HTTP_request and HTTP_RESPONSE but no luck.

 

 

  1. When a url comes through from this domain, we would like to rewrite as follows:
    1. Persona-api.domainname.com/v1/abc/…. - Rewrite to 172.17.2.7/abc/…
      1. Here we remove the /v1 in the path
    2. Persona-api.domainname.com/v2/xyz/…. – rewrite to 172.17.19.19/xyz/…
      1. Here we remove the /v2 in the path

Basically the only part of the URL that I know is persona-api.domainname.com/v1 or persona-api.domainname.com/v2

 

the rest after /V1 or /V2 will be dynamic and will change anytime..

 

How can I remove /V1 or /V2 and append the rest of the requested URL?

 

 

Any ideas are welcome..

 

 

thanks

 

  • Hi farche,

    You are setting the value of the $uri variable to the value in the brakets: string map -nocase {"/v1" "" "/v2" " "}

    It is then appending the value to the end of your HTTP::host value. It appears like it is appending it to the HTTP::host value but it really isn't.

    Change your set value to this and it should clear your problem:

    set uri [HTTP::uri [string map {"/v1" "" "/v2" ""} [HTTP::uri]]]

    So the entire iRule should look like this:

    
    when HTTP_REQUEST {
    if { ( [string tolower [HTTP::uri]] contains "/v1" ) or ( [string tolower [HTTP::uri]] contains "/v2" ) } {
    set uri [HTTP::uri [string map {"/v1" "" "/v2" ""} [HTTP::uri]]]
    HTTP::redirect "http://[HTTP::host]$uri"
    }
    }