16-Sep-2022 05:49
my requiremnet is if URI is something like /business/car/truck it shoud look for the "business " and change it as /company/car/truck..
$Path_proxy= company
when HTTP_REQUEST {
set http_hostname [getfield [HTTP::host] : 1]
set name [class match -value -- $http_hostname equals /DG_Test_i]
set lname [class match -value -- $Envname equals /DG_Test_i]
set proxy [class match -value -- $Poolname equals /DG_Test_i]
log local0. " name is $name "
log local0. " lname is $lname "
log local0. " proxy is $proxy "
if { [HTTP::uri] starts_with "/business"} {
HTTP::uri [string map {"/bsuiness/" $Path_proxy}[HTTP::uri]]------------->NOT working (path_proxy = /company)
HTTP::uri [string map {"/bsuiness/" "/company"}[HTTP::uri]]------------->working
}
}
verified with logs ..proxy variable is assigned with value "/company"
when i use direct content its working as expected whereas when i call the same value with variable($proxy) its not working.
Solved! Go to Solution.
16-Sep-2022 10:56
Is this more or less what you're iRule looks like?
when HTTP_REQUEST {
set Path_proxy "/company/"
set http_hostname [getfield [HTTP::host] : 1]
set name [class match -value -- $http_hostname equals /DG_Test_i]
set lname [class match -value -- $Envname equals /DG_Test_i]
set proxy [class match -value -- $Poolname equals /DG_Test_i]
log local0. " name is $name "
log local0. " lname is $lname "
log local0. " proxy is $proxy "
if { [HTTP::uri] starts_with "/business" } {
HTTP::uri [string map [list "/business/" ${Path_proxy}] [HTTP::uri]]
}
}
16-Sep-2022 07:58
Try the string map with a list instead:
HTTP::uri [string map [list "/business/" ${Path_proxy}] [HTTP::uri]]
16-Sep-2022 10:51
Hi kevin,
its not accepting the arguments
error: [wrong # args][string map [list "/business" ${Path_proxy}][HTTP::uri]]
/common/Test_api:13: error: [command is not valid in the current scope][}]
16-Sep-2022 10:56
Is this more or less what you're iRule looks like?
when HTTP_REQUEST {
set Path_proxy "/company/"
set http_hostname [getfield [HTTP::host] : 1]
set name [class match -value -- $http_hostname equals /DG_Test_i]
set lname [class match -value -- $Envname equals /DG_Test_i]
set proxy [class match -value -- $Poolname equals /DG_Test_i]
log local0. " name is $name "
log local0. " lname is $lname "
log local0. " proxy is $proxy "
if { [HTTP::uri] starts_with "/business" } {
HTTP::uri [string map [list "/business/" ${Path_proxy}] [HTTP::uri]]
}
}
16-Sep-2022 11:32
Great!! it was some spacing issues.Below worked
HTTP::uri [string map [list "/business/" ${Path_proxy}] [HTTP::uri]]
But earlier when i directly mention the /company it was not visible in address bar,but now when using the variable its visible in address bar..so how to make sure that the user does not see the new instance in address bar...
16-Sep-2022 12:42
You might want to do a browser developer tools capture or cURL test to see if the server isn't actually redirecting the client to this new URL. The iRule is changing the HTTP uri on the way to the server, otherwise the client should never know about this change. If you do a developer tools capture in the browser, look for a 30x redirect to this new URL path.
18-Sep-2022 10:46
everything works fine...Thanks!!!..not sure why address bar was showing the modified URI initially but it got fixed automatically .