Forum Discussion
iRule match & processing exit
Hi,
I'm trying write an iRule for an upcoming migration where we have multiple sites (MS Sharepoint) using the same host with different URI's. Some I want to just forward to a specific pool, while the 'rest' to be redirected to a new page. The 'rest' is basically everything starting with intranet, except some of the specific URI
when HTTP_REQUEST
{ if
{ ([HTTP::host] starts_with "intranet") && ([HTTP::uri] equals "/AAA/") } { pool intranet_pool
} elseif
{ ([HTTP::host] starts_with "intranet") && ([HTTP::uri] equals "/BBB/") } { pool intranet_pool
} elseif
{ [HTTP::host] starts_with "intranet" } { HTTP::redirect https://intranet.new
}}
I'm facing 2 issues:
- everything ends up being redirected intranet.new, no matter if the URI is AAA, BBB
- I'm getting too many redirects with above iRule. If i change the redirect to f5.com it works, but still redirect everything starting with intranet
Do I need to exit the iRule somehow after I got the first match? Or how do I stop further processing?
I've tried the same with LTM Policy, but getting same results.
Appreciate your feedback. Thanks.
Hi Stefan_Engel,
In your code, a redirect loop occurs because the redirected page always starts with "intranet". Can you try this iRule?
when HTTP_REQUEST { if { [HTTP::host] starts_with "intranet" && [HTTP::uri] equals "/AAA/" } { pool intranet_pool return } elseif { [HTTP::host] starts_with "intranet" && [HTTP::uri] equals "/BBB/" } { pool intranet_pool return } elseif { [HTTP::host] starts_with "intranet" && [HTTP::uri] ne "/" } { HTTP::redirect https://intranet.new return } }
If the uri is not "/", it will redirect.
If the uri is "/", it will not redirect, traffic will be forwarded to the default pool.
If there is no character after the hostname in url, the uri is always "/".
Hi Stefan_Engel,
In your code, a redirect loop occurs because the redirected page always starts with "intranet". Can you try this iRule?
when HTTP_REQUEST { if { [HTTP::host] starts_with "intranet" && [HTTP::uri] equals "/AAA/" } { pool intranet_pool return } elseif { [HTTP::host] starts_with "intranet" && [HTTP::uri] equals "/BBB/" } { pool intranet_pool return } elseif { [HTTP::host] starts_with "intranet" && [HTTP::uri] ne "/" } { HTTP::redirect https://intranet.new return } }
If the uri is not "/", it will redirect.
If the uri is "/", it will not redirect, traffic will be forwarded to the default pool.
If there is no character after the hostname in url, the uri is always "/".- Kevin_StewartEmployee
I would add some log statements to see exactly what you're getting. It could simply be a string case issue.
On the redirects, your last line is causing this. You're basically saying if the host starts with "intranet", redirect to "intranet.new". But if the same iRule processes intranet.new, then that too will start with "intranet".
when HTTP_REQUEST { log local0. "Incoming: [HTTP::host][HTTP::uri]" if { ( [HTTP::host] starts_with "intranet" ) && ( [HTTP::uri] equals "/AAA/" ) } { log local0. "Catch /AAA/ - Sending to intranet_pool" pool intranet_pool } elseif { ( [HTTP::host] starts_with "intranet" ) && ( [HTTP::uri] equals "/BBB/" ) } { log local0. "Catch /BBB/ - Sending to intranet_pool" pool intranet_pool } elseif { ( [HTTP::host] starts_with "intranet" ) && ( [HTTP::host] ne "intranet.net" ) } { HTTP::redirect https://intranet.new } }
- Stefan_EngelCirrus
Thank you both for the response. I've added logging which helped and the ne "/" solved the loop on redirects.
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