HTTP Rewrite header + pool based on URI
Hi,
I need to forward traffic from external URL to one of our internal servers based on URI. That has to be transparent for the browser with no redirect messages 3xx.
Searching in the forum and using codes from other members I constructed the following iRule though based on by debug it looks like I'm getting in problems with the HTTP response header.
I'm trying to modify the header for requests coming to externalsite.com/foobar --> internalsite.com/foobar and direct these requests to specific pool named "internal_pool" The reply back should contain the original header and all that has to be done transparent to the browser.
I would very much appreciate if any one can share an idea where I'm going wrong:
Here is my iRule:
==========================
when RULE_INIT {
Set the hostname that the client makes request to (do not include protocol)
set external_hostname "externalsite.com"
Set the hostname that the BIG-IP will rewrite requests to
set internal_hostname "internalsite.com"
when CLIENT_ACCEPTED { assign default pool to variable once 3WHS is complete. set default_pool [LB::server pool] }
when HTTP_REQUEST {
log local6.notice "External request from [IP::client_addr] -> [HTTP::host][HTTP::uri]"
if { ([string tolower [HTTP::uri]] eq "/foobar") } {
HTTP::header replace Host "$internal_hostname"
pool internal_pool
log local6.notice "External request header rewrite [IP::client_addr] -> [HTTP::host][HTTP::uri]"
} else {
pool $default_pool
}
} when HTTP_RESPONSE { if { [HTTP::status] == 302 } { switch [string tolower [HTTP::header Location]] { "$&internal_hostname" { HTTP::header replace Location "&external_hostname" } }
} }Thank You.
Hi,
here an rule example :
when RULE_INIT { set external_hostname "externalsite.com" set internal_hostname "internalsite.com" } when CLIENT_ACCEPTED { set default_pool [LB::server pool] } when HTTP_REQUEST { Disable the stream filter for requests STREAM::disable Remove this header to prevent server from compression response HTTP::header remove Accept-Encoding if { ([string tolower [HTTP::path]] eq "/foobar") } { HTTP::host [string map {$external_hostname $internal_hostname} [HTTP::host]] pool internal_pool } else { pool $default_pool } } when HTTP_RESPONSE { Rewrite the Location header for redirects if { [HTTP::header exists Location] }{ HTTP::header replace Location [string map {$external_hostname $internal_hostname} [HTTP::header Location]] } Rewrite the response content using a stream profile if it is text if { [HTTP::header Content-Type] contains "text" } { Set the stream expression with the find/replace strings STREAM::expression "@xyz.company.com@abc.company.com@" Enable the stream filter STREAM::enable } }