on
04-Aug-2016
05:45
- edited on
05-Jun-2023
22:49
by
JimmyPackets
Problem this snippet solves:
You need to make load balancing or whatever else decision based on multiple context information like HTTP host header, URI, Referer header, cookie value, etc.
How to use this snippet:
This code allow to use a single switch command to manage multiple conditions instead of several nested if or switch conditions.
Normal condition :
switch -glob [HTTP::host] { "www.example.net" { if { [HTTP::header "Referer"] contains "host.example.net" } { # do action 1 } else { # do action 2 } } "www.example.com" { switch -glob [HTTP::header Referer] { "*host.example.com" { if { [HTTP::method] eq "GET" } { # do action 3 } } default { # do action 4 } } } } `</pre> Using the process described in this codeshare article : <pre>`switch -glob "[HTTP::host]|[HTTP::header Referer]|[HTTP::method]" { "www.example.net|*host.example.net*|*" { # do action 1 } "www.example.net|*" { # do action 2 } "www.example.com|*host.example.com*|GET" { # do action 3 } "www.example.com|*" { # do action 4 } }
Code :
when HTTP_REQUEST { switch -glob "[HTTP::host]|[HTTP::header 'Referer']|[HTTP::uri]" { "*|*REFERERPART*|*" - "*|*|*URIPART*" - "*HOSTPART*|*|*" { # do some action } "host.example.com|*www.example.net*|*" { # do some action } default { # do some action } } }
Tested this on version:
11.3