Forum Discussion
Help with an I-rule rewrite
I'm trying to use an I-rule to add the http hostname in the url to the beginning of the uri then rewrite the hostname. Example:
If the client request to a VIP is https://proxy-v2.api-np-c.newapps.com/<somepath>, I want the request to the server pool to be this https://proxy-v2.api-gw-np-a.newapps.com/proxy-v2.api-np-c.newapps.com/<somepath>
I've tried this and it didn't work:
when HTTP_REQUEST {
if {[HTTP::uri] starts_with "/" } {
HTTP::uri /[HTTP::host][HTTP::uri]
}
switch -glob [HTTP::host] {
"*.api-np-c.newapps.com*" {
set http_host [HTTP::host]
set startPos [string first .api-np-c $http_host]
set endPos [expr $startPos + 11]
set http_host [string replace $http_host $startPos $endPos .api-gw-np-a]
HTTP::header replace Host "$http_host"
}
}
}
-------------------------------------------------------------------------------------------------------
After some digging, I plan to try this next:
when HTTP_REQUEST {
if {[HTTP::uri] starts_with "/" } {
HTTP::uri /[HTTP::host][HTTP::uri]
} else {
switch -glob [HTTP::host] {
"*.api-np-c.newapps.com*" {
set http_host [HTTP::host]
set http_host [string map -nocase {".api-np-c" ".api-gw-np-a"} [HTTP::uri]]
HTTP::header replace Host "$http_host"
}
}
}
}
As you can probably tell, I'm really new working with i-rules. Any help would be greatly appreciated!
3 Replies
- y-not-me
Nimbostratus
Thanks for the response. I needed it to work with *.api-np-c.newapps.com and *api-gw-np-a.newapps.com. I got it working with this, finally. I had the endPos wrong initially. It needed to be +8 not +11:
when HTTP_REQUEST {
if {[HTTP::uri] starts_with "/" } {
HTTP::uri /[HTTP::host][HTTP::uri]
}
switch -glob [HTTP::host] {
"*.api-np-c.regionsapps.com*" {
set http_host [HTTP::host]
set startPos [string first .api-np-c $http_host]
set endPos [expr $startPos + 8]
set http_host [string replace $http_host $startPos $endPos .api-gw-np-a]
HTTP::header replace Host "$http_host"
}
}}
- Injeyan_Kostas
Nacreous
You could use something like this
when HTTP_REQUEST
{
if { [HTTP::host] equals "proxy-v2.api-np-c.newapps.com" }
{
HTTP::header replace "Host" "proxy-v2.api-gw-np-a.newapps.com"
set uri /proxy-v2.api-np-c.newapps.com[HTTP::uri]
HTTP::uri $uri
}
}Keep in mind that depending on how your web server is configured, you might also need to rewrite responses.
Help guide the future of your DevCentral Community!
What tools do you use to collaborate? (1min - anonymous)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