Technical Forum
Ask questions. Discover Answers.
cancel
Showing results for 
Search instead for 
Did you mean: 
Custom Alert Banner

2 IRules with "when HTTP_REQUEST"

kgaigl
Cirrocumulus
Cirrocumulus

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
Cirrocumulus
Cirrocumulus

Hi Enes,

 

the combined Rule is working fine.

 

Thank you

 

Karl

Hi,

Can you share the iRules?

what is reason behind i cannot use 2 separate http request irule in version 16 , 2 http request irule i used in version 13