Forum Discussion
http redirect mask
Hi, we have a site eg. abc.host.com that comes in and gets redirected to http://def:8080/123/456 (an internal box). I have applied the following irule to do this:
when HTTP_REQUEST {
HTTP::redirect "http://def:8080/123/456"
}
This works fine just the end user sees "http://def:8080/123/456" in their address bar. Is there anyway to change this so they see http://abc.host.com ?
Thanks
15 Replies
- Konsta_129111
Nimbostratus
There was one example of reverse proxy in code samples, try to check there. - cymru81
Altocumulus
thanks for that, i am new to all this so could you provide a link or example if possible?
- Syafiq_89483
Cirrus
thanks for that, i am new to all this so could you provide a link or example if possible?
maybe this one?
https://devcentral.f5.com/questions/http-redirect-1130
- cymru81
Altocumulus
thanks, my re-direct works perfect, its just i dont want the re-directed URL shown in the address bar, just the source URL, if that makes sense?
- Syafiq_89483
Cirrus
thanks, my re-direct works perfect, its just i dont want the re-directed URL shown in the address bar, just the source URL, if that makes sense?
interesting case! but i'm not sure whether it's doable with irules or not.
- cymru81
Altocumulus
is there anyway to do this then? :)
- What_Lies_Bene1
Cirrostratus
Any literal links and HTTP Location headers in the response payload will need to be rewritten if you want to do this properly. You'll also need to create a flexible redirect to cover all possible URLs and of course, if SSL is involved, it'll break. Not worth the effort as far as I'm concerned.
- Kevin_Stewart
Employee
How you do this depends on a few factors.
- Is it JUST this URL or are there many to map?
- Does the Host header have to change to "def:8080" for the back end server to accept it?
At the very least, assuming no to both questions above, you can do something like this:
when HTTP_REQUEST { if { [HTTP::uri] equals "/" } { HTTP::uri "/123/456" } }If the URI is "/", then transparently replace the URI in the request with "/123/456". If the server doesn't need the "def:8080" Host header, and since you're already load balancing to port 8080, this might work for the simplest site. Anything more complex and you have to start looking at things like ProxyPass - an iRule/datagroup combo that does mass translation from/to external/internal Hosts, URIs, and pools.
In any case, the HTTP::uri command silently changes the request URI inbound, so that the client never sees this in the browser.
- cymru81
Altocumulus
it is just this URL and it does need to use the specific port...?
- Kevin_Stewart
Employee
it is just this URL and it does need to use the specific port...?
The port is already defined in the pool, so what I meant was if the server required a different Host header in the request. If you do nothing, the Host header in the request (what the server will see) will be "abc.host.com", while the server may actually need "def:8080". It's rare, but it does happen. If it doesn't care about the Host header, then you don't need to worry about it.
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