For more information regarding the security incident at F5, the actions we are taking to address it, and our ongoing efforts to protect our customers, click here.

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