Forum Discussion

kgaigl's avatar
kgaigl
Icon for Cirrocumulus rankCirrocumulus
Dec 23, 2021
Solved

2 IRules with "when HTTP_REQUEST"

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

  • 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>
    				...

4 Replies

  • 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's avatar
    kgaigl
    Icon for Cirrocumulus rankCirrocumulus

    Hi Enes,

     

    the combined Rule is working fine.

     

    Thank you

     

    Karl