cancel
Showing results for 
Search instead for 
Did you mean: 

2 IRules with "when HTTP_REQUEST"

kgaigl
Cirrostratus
Cirrostratus

Hello,

 

I need on a VS 2 IRules, one for redirect to a URI and one for a Maintanance Page:

 

redirect:

when HTTP_REQUEST {   if { [HTTP::uri] equals "/"}  {     HTTP::redirect "https://[HTTP::host]/some-uri"  } }

 

Maintanance Page:

when HTTP_REQUEST {         if { [active_members [LB::server pool]] < 1 } {         switch [HTTP::uri] {         "/bg-wappen.gif" {HTTP::respond 200 content [ifile get "bg-wappen.gif"]}         default {HTTP::respond 200 content { <!DOCTYPE html> ...

 

but if I assign both IRules, if the backend server is down, the redirect doesn't work.

 

I tried with priority 10 in one IRule and 20 in the other IRule

 

Have you some suggestions for a solution? Both requirements in one Rule?

 

I've tried:

 

when HTTP_REQUEST { if { [HTTP::uri] equals "/"}  {     HTTP::redirect "https://[HTTP::host]/some-uri"  }         if { [active_members [LB::server pool]] < 1 } {         switch [HTTP::uri] {         "/bg-wappen.gif" {HTTP::respond 200 content [ifile get "bg-wappen.gif"]}         default {HTTP::respond 200 content { <!DOCTYPE html> ...

 

but didn't resolve

 

thank you

1 ACCEPTED SOLUTION

Hi kgaigl,

 

I think a tcl error occurs. Can you investigate the ltm logs?

cat /var/log/ltm | grep "TCL error"

https://support.f5.com/csp/article/K23237429

 

Redirect:

when HTTP_REQUEST { if { [HTTP::has_responded] } { return } if { [HTTP::uri] equals "/" } { HTTP::redirect "https://[HTTP::host]/some-uri" return } }

Maintanance Page:

when HTTP_REQUEST priority 450 { if { [HTTP::has_responded] } { return } if { [active_members [LB::server pool]] < 1 } { switch [HTTP::uri] { "/bg-wappen.gif" { HTTP::respond 200 content [ifile get "bg-wappen.gif"] } default { HTTP::respond 200 content { <!DOCTYPE html> ...

Combined:

when HTTP_REQUEST { if { [HTTP::has_responded] } { return } if { [HTTP::uri] equals "/" } { HTTP::redirect "https://[HTTP::host]/some-uri" return } elseif { [active_members [LB::server pool]] < 1 } { switch [HTTP::uri] { "/bg-wappen.gif" { HTTP::respond 200 content [ifile get "bg-wappen.gif"] } default { HTTP::respond 200 content { <!DOCTYPE html> ...

 

View solution in original post

4 REPLIES 4

Hi kgaigl,

 

I think a tcl error occurs. Can you investigate the ltm logs?

cat /var/log/ltm | grep "TCL error"

https://support.f5.com/csp/article/K23237429

 

Redirect:

when HTTP_REQUEST { if { [HTTP::has_responded] } { return } if { [HTTP::uri] equals "/" } { HTTP::redirect "https://[HTTP::host]/some-uri" return } }

Maintanance Page:

when HTTP_REQUEST priority 450 { if { [HTTP::has_responded] } { return } if { [active_members [LB::server pool]] < 1 } { switch [HTTP::uri] { "/bg-wappen.gif" { HTTP::respond 200 content [ifile get "bg-wappen.gif"] } default { HTTP::respond 200 content { <!DOCTYPE html> ...

Combined:

when HTTP_REQUEST { if { [HTTP::has_responded] } { return } if { [HTTP::uri] equals "/" } { HTTP::redirect "https://[HTTP::host]/some-uri" return } elseif { [active_members [LB::server pool]] < 1 } { switch [HTTP::uri] { "/bg-wappen.gif" { HTTP::respond 200 content [ifile get "bg-wappen.gif"] } default { HTTP::respond 200 content { <!DOCTYPE html> ...

 

kgaigl
Cirrostratus
Cirrostratus

Hi Enes,

 

the combined Rule is working fine.

 

Thank you

 

Karl

mickbiden2
Nimbostratus
Nimbostratus

I have the same issue. Any tips for solution?

 

 teatv.ltd

hellodear.in

Hi,

Can you share the iRules?