Skip to content

Instantly share code, notes, and snippets.

@vukhanhtruong
Forked from dimsemenov/vcl-regex-cheat-sheet
Created June 17, 2020 02:20
Show Gist options
  • Save vukhanhtruong/2ffd14c8b51477a90228dcf85648ecdf to your computer and use it in GitHub Desktop.
Save vukhanhtruong/2ffd14c8b51477a90228dcf85648ecdf to your computer and use it in GitHub Desktop.
Regular expression cheat sheet for Varnish (.vcl). Examples of vcl regexp. Found here http://kly.no/varnish/regex.txt (by Kristian Lyngstøl)
Regular expression cheat sheet for Varnish
Varnish regular expressions are NOT case sensitive. Varnish uses POSIX
regular expressions, for a complete guide, see: "man 7 regex"
Basic matching:
req.url ~ "searchterm"
True if req.url contains "searchterm" anywhere.
req.url == "searchterm"
True if req.url is EXACTLY searchterm
Matching at the beginning or end of a string
req.http.host ~ "^www."
True if req.http.host starts with "www" followed by any single
character.
req.http.host ~ "^www\."
True if req.http.host starts with "www.". Notice that . was
escaped.
req.url ~ "\.jpg$"
True if req.url ends with ".jpg"
Multiple matches
req.url ~ "\.(jpg|jpeg|css|js)$"
True if req.url ends with either "jpg", "jpeg", "css" or "js".
Matching with wildcards
req.url ~ "jp.g$"
True if req.url ends with "jpeg", "jpag", "jp$g" and so on, but NOT
true if it ends with "jpg".
req.url ~ "jp.*g$"
True if req.url ends with "jpg", "jpeg", "jpeeeeeeeg",
"jpasfasf@@!!g" and so forth (jp followed by 0 or more random
characters ending with the letter 'g').
Conditional matches
req.url ~ "\.phg(\?.*)?$"
True if req.url ends with ".php" ".php?foo=bar" or ".php?", but not
".phpa". Meaning: Either it ends with just ".php" or ".php"
followed by a question mark any any number of characters.
req.url ~ "\.[abc]foo$"
True if req.url ends with either ".afoo" ".bfoo" or ".cfoo".
req.url ~ "\.[a-c]foo$"
Same as above.
Replacing content
set req.http.host = regsub(req.http.host, "^www\.","");
Replaces a leading "www." in the Host-header with a blank, if
present.
set req.http.x-dummy = regsub(req.http.host, "^www.","leading-3w.");
Sets the x-dummy header to contain the host-header, but replaces
a leading "www." with "leading-3w" example:
Host: www.example.com =>
Host: www.example.com
X-Dummy: leading-3w.example.com
Host: example.com =>
Host: example.com
X-Dummy: example.com
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment