Forum Discussion
ProxyPass
Hi - hope this is the right place to pose this question
Background:
We are using the ProxyPass irule v10.2 to setup URI shortcode/keyword redirects (rewrites?) e.g. www.123.com/checkthisout redirecting to www.123.com/tabid/1111/Default.aspx?showid=18828" while retaining/cloaking the redirected URI i.e. only www.123.com/checkthisout displays in the browser address area.
Problem:
Our interactive team does not want the redirected URI to be cloaked and wants it to be displayed in full in the browser address area e.g. user enters www.123.com/checkthisout into browser and is redirected to www.123.com/tabid/1111/Default.aspx?showid=18828" with this full address appearing in their browser address area.
Question:
Can ProxyPass be configured to show the full URI of the redirect instead of 'cloaking' it?
8 Replies
- hoolio
Cirrostratus
If you send an HTTP redirect, the client will see the change in their address bar. If you rewrite the URI and/or host before sending the request to the server, the client will not see the change. So in concept you could modify the ProxyPassv10 iRule to send a redirect instead of rewriting the URI, but you'll need to strip out a fair amount of code related to the rewriting. You can send a 302 redirect with HTTP::redirect or any HTTP response with HTTP::respond.
http://devcentral.f5.com/wiki/default.aspx/iRules/http__redirect
http://devcentral.f5.com/wiki/default.aspx/iRules/http__respond
Aaron - wrightnz_34708
Nimbostratus
Thanks!
If I can't get ProxyPass to work this way and use HTTP:respond instead - how could I write an HTTP::respond for multiple redirects in the same irule
e.g. this is how I'd do one for a single redirect at the moment
-----------------------------
when HTTP_REQUEST {
switch [string tolower [HTTP::host]] { "123.com"
{
HTTP::respond 301 Location "http://www.123.com[HTTP::uri]"
}
}
}
----------------------------
My proxypass DataGroupList external file /config/ProxyPass123 contains multiple redirects like
"www.123.com/land" := "www.123.com/Shows/land/tabid/26/Default.aspx",
"www.123.com/aw" := "www.123.com/Shows/Advanced/tabid/45/Default.aspx",
"www.123.com/attack" := "www.123.com/Shows/Attack/tabid/14/Default.aspx",
"www.123.com/plenty" := "www.123.com/Shows/Plenty/tabid/27/Default.aspx",
"www.123.com/blogs" := "www.123.com/Shows/Blogs/tabid/93/Default.aspx",
"www.123.com/OP" := "www.123.com/Shows/Plenty/tabid/57/Default.aspx",
"www.123.com/derbury" := "www.123.com/Shows/derbury/tabid/58/Default.aspx",
"www.123.com/Central" := "www.123.com/Shows/Central/tabid/29/Default.aspx",
"www.123.com/channel" := "www.123.com/Shows/tabid/397/Default.aspx",
"www.123.com/church" := "www.123.com/Shows/derbury/tabid/58/Default.aspx",
"www.123.com/events" := "www.123.com/Events/tabid/699/Default.aspx", - hoolio
Cirrostratus
Here is an example which checks the HTTP path (set to lower case for IIS apps) and sends a 301 response based on the datagroup entries you have above. Note that I've removed all checks of the host. If you want to add handling for other hosts, you can put the switch inside a check on HTTP::host. If you want to check if the requested path starts with the strings, you can add the -glob flag to the switch and add a * to the end of the path(s):
switch wiki page
http://devcentral.f5.com/wiki/default.aspx/iRules/switchwhen HTTP_REQUEST { Set the path to lowercase switch [string tolower [HTTP::path]] { "/land" { HTTP::respond 301 Location "/Shows/land/tabid/26/Default.aspx" } "/aw" { HTTP::respond 301 Location "/Shows/Advanced/tabid/45/Default.aspx" } "/attack" { HTTP::respond 301 Location "/Shows/Attack/tabid/14/Default.aspx" } "/plenty" { HTTP::respond 301 Location "/Shows/Plenty/tabid/27/Default.aspx" } "/blogs" { HTTP::respond 301 Location "/Shows/Blogs/tabid/93/Default.aspx" } "/op" { HTTP::respond 301 Location "/Shows/Plenty/tabid/57/Default.aspx" } "/derbury" { HTTP::respond 301 Location "/Shows/derbury/tabid/58/Default.aspx" } "/central" { HTTP::respond 301 Location "/Shows/Central/tabid/29/Default.aspx" } "/channel" { HTTP::respond 301 Location "/Shows/tabid/397/Default.aspx" } "/church" { HTTP::respond 301 Location "/Shows/derbury/tabid/58/Default.aspx" } "/events" { HTTP::respond 301 Location "/Events/tabid/699/Default.aspx" } default { Take some default action? } } }
Aaron - wrightnz_34708
Nimbostratus
Cheers - works great! - hoolio
Cirrostratus
Good to hear you got this working.
Aaron - wrightnz_34708
Nimbostratus
One more question if I may... can wildcards be used e.g. using siteurls.config to look for characters in URI and redirect
[RewriterRule]
[LookFor].*tabid/786/.*[/LookFor]
[SendTo]http://www.123.com/error404.aspx[/SendTo]
[/RewriterRule]
Could I change this to an iRule as follows - how would you use string match for glob style wildcard pattern matching: (string match "*/tabid/786/*" [HTTP::uri])
Would this work?
when HTTP_REQUEST {
Set the path to lowercase
switch -glob [string tolower [HTTP::uri]] {
"*/tabid/786/*" {
HTTP::respond 301 Location "http://www.123.com/error404.aspx"
}
}
} - hoolio
Cirrostratus
That looks exactly correct. If as in your original post, you want to check for multiple patterns that use the same action, you can group them using a -when HTTP_REQUEST { Set the path to lowercase switch -glob [string tolower [HTTP::uri]] { "*/tabid/737/*" - "*/tabid/746/*" - "*/tabid/786/*" { HTTP::respond 301 Location "http://www.123.com/error404.aspx" } } }
Aaron - wrightnz_34708
Nimbostratus
AWESOME!
Changed slightly to :
----------------------------------------------------------------------
when HTTP_REQUEST {
Set the path to lowercase
switch -glob [string tolower [HTTP::uri]] {
"*tabid/737/*" -
"*tabid/746/*" -
"*tabid/786/*" {
HTTP::respond 301 Location "http://www.123.com/error404.aspx"
}
}
}
-----------------------------------------------------------------------
Thanks again!
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