Forum Discussion
URL rewrite through iRule
Hi Guys, i have one "Performance (HTTP)" virtual server on F5-1600 series, and i want to change the URL "http://www.abc.com" to "http://partner.abc.com/xyz". i have tried all below scripts :
1- when HTTP_REQUEST { if {([string tolower [HTTP::host]] equals "http://www.abc.com")}{ HTTP::header replace Host "http://partner.abc.com/xyz" } }
2- when HTTP_REQUEST { if { not ([HTTP::uri] starts_with "/xyz") } { HTTP::uri /xyz[HTTP::uri] } }
3- when HTTP_REQUEST { if {[HTTP::uri] equals {http://www.abc.com}} {HTTP::uri {http://partner.abc.com/xyz} } }
but i wasn't successful! can anyone help me how can i do this through iRule ?
Hi Sunnyman,
This will work;
if { [IP::addr [IP::client_addr] equals 1.1.1.1] || [IP::addr [IP::client_addr] equals 1.1.1.2} { SNAT with 1.1.1.100 snatpool VM_SNAT_POOL_1_1_1_100 } elseif { [IP::addr [IP::client_addr] equals 1.1.1.11] || [IP::addr [IP::client_addr] equals 1.1.1.12} { SNAT with 1.1.1.100 snatpool VM_SNAT_POOL_1_1_1_200 }
But that's not a very scalable way of doing it if your list is going to grow. If it's going to grow then use an address datagroup, with values snatpool names, which you can use like this
snatpool [class match -value [IP::remote_addr] equals dg_sunnyman_snatpools]
or more correctly;
set snatpool [class match -value [IP::remote_addr] equals dg_sunnyman_snatpools] if {$snatpool ne "") { snatpool $snatpool }
- sunnyman67_1367Nimbostratus
Joanna, thanks a lot for your regards to my issue, i've checked your new solution yesterday, i think it must be worked properly, i'm testing it in different situations, i should finish my test process as soon as possible, and tell you the results. So let me to do my final check process with our network & vm team. I hope it'll be solved...
- sunnyman67_1367Nimbostratus
Joanna, thanks a lot for your regards to my issue, i've checked your new solution yesterday, i think it must be worked properly, i'm testing it in different situations, i should finish my test process as soon as possible, and tell you the results. So let me to do my final check process with our network & vm team. I hope it'll be solved...
- sunnyman67_1367Nimbostratus
Hi Joanna, i checked your last solution, it worked well for some VSs on my load-balancer, but i countered to one another small issue: do you know how can i change only the Context part of a URL? for example, when clinets want to see "www.abc.com/photos?tid5335gfgf53..." , in addition of URL-rewrite, i want to change the context part (fisrt part) of related URI (e.g. to "www.xyz.com/gallery?tid5335gfgf53..."). So, i don't want to change last part of URI (parameters). I want only to change first part of URI (in my example, "photos" to "gallery" with the same parameters as first URI). can you help me again joanna? thanks a lot for your regards...
- IheartF5_45022Nacreous
HTTP::uri "/gallery?[HTTP::query]"
Sorry to be brief - on phone.
- sunnyman67_1367Nimbostratus
Thanks a lot joanna for your quick answer, ok , let me try it today or tomorrow and tell you the results...
- sunnyman67_1367Nimbostratus
Excuse me joanna, are both of below commands same?
1) HTTP::uri "/gallery?[HTTP::query]" 2) HTTP::uri "/gallery?[URI::query [HTTP::uri]]"
- IheartF5_45022Nacreous
Yes you are right!! Was trying to do from memory - should be;
HTTP::uri "/gallery?[URI::query [HTTP::uri]]
- sunnyman67_1367Nimbostratus
OK joanna, so let me try it and tell you the final results as soon as possible, Thanks a lot for your regards joanna...
- sunnyman67_1367Nimbostratus
Hi again joanna, i've checked both commands. For some of URLs they are ok, but for some of them not! Do you have any other idea to maintain query part of a URI and only change the path part of that URI, except these three blow commands ???
HTTP::uri "/ABC/newPics?[URI::query [HTTP::uri]]" HTTP::uri /ABC/newPics"?[HTTP::query]" HTTP::uri "/ABC/newPics?[HTTP::query]"
- sunnyman67_1367Nimbostratus
Hi joanna, i have one another question: i have one VS, i want to do SNAT through different SNAT Pool List upon the client source IP address. For example, if the source ip address of client is 1.1.1.1/24 or 1.1.1.2/24, VS should changes the source ip address of outgoing packet to 1.1.1.100, and if the source ip address of client is 1.1.1.11/24 or 1.1.1.12/24, VS should changes the source ip address of outgoing packet to 1.1.1.200. I've checked it with below script, but it didn't work! Am i wrong? Can you help me? Is there any need to use of HTTP_REQUEST or some other methods???
when HTTP_REQUEST {
switch -glob [IP::client_addr] {
"1.1.1.1" - "1.1.1.2" { SNAT with 1.1.1.100 snatpool VM_SNAT_POOL_1_1_1_100 } "1.1.1.11" - "1.1.1.12" { SNAT with 1.1.1.200 snatpool VM_SNAT_POOL_1_1_1_200 }
} }
Recent Discussions
Related Content
* Getting Started on DevCentral
* Community Guidelines
* Community Terms of Use / EULA
* Community Ranking Explained
* Community Resources
* Contact the DevCentral Team
* Update MFA on account.f5.com