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

Mikesisav's avatar
Mikesisav
Icon for Altostratus rankAltostratus
Oct 01, 2020

irule for request and response

All,

 

Looking to irule a request and response header edit for https://example.com/x/y

 

So, that when user inputs https://example.com/x/y , request is sent to server as https://example.com/y

 

Anything input into y as a string is request to server.

 

I have created this:

 

when HTTP_REQUEST {

 if { [HTTP::path] equals "/x/y" }{ 

  HTTP::redirect "/y/"

 }

}

 

This returns above irule https://example.com/y . but, the ask is to add x back to the response and return https://example.com/x/y to the user.

 

The parts I am working on now are the response edit and how to use the string input by the user - y - to reflect anything. Similarly, to x when responding back.

 

1 Reply

  • So, I got some direction...

     

    Here are the three possible paths : 

     

    /x

    /y

    /z 

     

    Each could have another resource behind the initial path i.e. /x/ping or /x/file or z/path or z/box.

     

    The other resource /ping or /file or /path or /box is what I don't know will be called but needs to be requested to the server and /x, /y, or /z needs to be edited out and only the second resource needs to be sent to server.  

     

    So user puts in /x/ping and /ping gets request to server.  

     

    Similarly, when the response is sent back the first resource needs to be added back. As in if we called /x/ping, x would be add back from the server that only was called /ping.

     

    So.. all that written, let me see how to apply the below with x.  

     

    when HTTP_REQUEST {

      if { [HTTP::uri] starts_with "/x/1" } {

        #Comment:The string map is used to replace the uri value from /uri/1 to /uri/2.   

        HTTP::uri [string map {"/x/1/" "/x/2"} [HTTP::uri]]

        pool pool_x

      }

     

    when HTTP_RESPONSE {

      if { [HTTP::uri] starts_with "/x/2" } {

        HTTP::uri [string map {"/x/2/" "/x/1"} [HTTP::uri]]

      }

     

     

    So, with the three first resources - x, y, z - and this all being one virtual server, would I just create three irules and apply them all to the one virtual server?  

     

    Happy Irulz Friday.