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

Giammarco's avatar
Giammarco
Icon for Nimbostratus rankNimbostratus
Sep 12, 2020

iRule that match rewrite policy

Hi guys,

 

I need to implement an iRule that works like a Rewrite profile but should change URI path (remove a part of the string) to the server side. I cannot use the normal rewrite because on the same VIP I’ve two domains and the server URI it’s the same for both, this is an example:

 

prod.example.com/prod/service1 -> should rewrite to /service1 when goes to server pool

 

test.example.com/test/service1 -> should rewrite to /service1 when goes to server pool

 

obviously the policy gives me error backup server URI is already used.

 

I’ve tried this iRule but I got error 404 from server side:

 

when HTTP_REQUEST {

  set host [HTTP::host]

  set uri [string tolower [HTTP::uri]]

   

  if { $host equals "test.example.com" } {

    HTTP::uri [string map {"/test" "" } $uri ]

  }

}

 

any help is really appreciated

 

thanks

1 Reply

  • Your iRule looks like it is only covering one of the two possible host names - test.example.com. There is no condition for removing the "/prod" string if the host name is prod.example.com which may be the cause of your 404 response. You can add a couple of log commands to the iRule to see what the before and after URIs look like. For example:

    when HTTP_REQUEST {
        log local0. "URI on client side is: [HTTP::uri]"
        if { [HTTP::host] equals "prod.example.com" || [HTTP::host] equals "test.example.com" } {
            HTTP::uri [string map { "/test" "" } [HTTP::uri] ]
            log local0. "URI on server side changed to: [HTTP::uri]"
        }
    }

    Also, if there is any chance the URI might contain only "/test" or "/prod" (e.g. "test.example.com/test" or "prod.example.com/prod") you should check for that possibility before executing the string map command as shown. Otherwise, it will leave you with a null URI which generates an error message to /var/log/ltm and stops the iRule from completing.