cancel
Showing results for 
Search instead for 
Did you mean: 

iRule exclude URI

Alex_Pintel
Nimbostratus
Nimbostratus

I am fairly new to iRules so any help greately appreciated.

What is correct syntax to exclude URI "/abc/Web123/cde/forum123/ from receiving HTTP code 200 and the message "123456789"? Is the exclamation mark a orrect synatx to exclude URI?

Here is iRule

when HTTP_REQUEST {
set http_path [ string tolower [HTTP::path]]
if { ! ($http_path starts_with "/abc/Web123/cde/forum123") } {
HTTP::respond 200 content "
<html>
<head>
<title></title>
</head>
<body>
123456789
</body>
</html>
"
}
}

Thank you for any assistamce you can provide.

1 ACCEPTED SOLUTION

To negate starts_with I would use the not operator:

https://clouddocs.f5.com/api/irules/not.html

when HTTP_REQUEST {
  if { not ([HTTP::uri] starts_with "/abc") } {
     # do something ...
  } else {
     # do something else...
 }
}

For excluding the exact path, you can go with  the "ne" operator

View solution in original post

6 REPLIES 6

mihaic
Cirrostratus
Cirrostratus

As far as i know you can use ! or NOT.

Here are the operators list:

https://clouddocs.f5.com/api/irules/Operators.html

 

Hi @Alex_Pintel , 
Could you please try this : 

when HTTP_REQUEST {
#set http_path [ string tolower [HTTP::path]]
if { [HTTP::path] ne "/abc/Web123/cde/forum123" } {
HTTP::respond 200 content "
<html>
<head>
<title></title>
</head>
<body>
123456789
</body>
</html>
"
}
}

I tested it on my lab and it works well. 
Regards

CA_Valli
Cumulonimbus
Cumulonimbus

Hello, if you're looking to exclude an exact match for a string, "ne" operator can be used as well.

One thing I noticed -- since this is an exact match, be careful with "string tolower" syntax as it will convert everything to lowercase, so you will never see Web123 -- it's gonna be web123 instead. 

I generally don't recommend converting paths to lowercase since it is case sensitive, try using this instead:  

if { [HTTP::path] ne "/abc/Web123/cde/forum123" }{ ... } 

 

Thank you all for responding to my post. I have another question.

What would be right syntax if I need to use 2 URLs?

if { [HTTP::path] ne "/abc/Web123/cde/forum123" OR "/abc/Web123/cde/forum456"

Is the "OR" correct operator?

Thank you! 

For the requested logic, you need the "and" operator between two tests:

if { ([HTTP::path] ne "/abc/Web123/cde/forum123") and ([HTTP::path] ne "/abc/Web123/cde/forum456") } 

 If you plan to add more paths in the future, then consider using a switch test

To negate starts_with I would use the not operator:

https://clouddocs.f5.com/api/irules/not.html

when HTTP_REQUEST {
  if { not ([HTTP::uri] starts_with "/abc") } {
     # do something ...
  } else {
     # do something else...
 }
}

For excluding the exact path, you can go with  the "ne" operator