varnish purge hack

Do you have the problem that you want to ban/purge elements on your site using both absolute and relative matching?

Let say your vcl contains ban("req.url ~ (?i)" + req.url);, what happens if you purge the root / is that it will purge
your whole site since you are matching with ~. But if you would match with == instead you would have to use absolute urls for every single element you want to purge. Cumbersome, right?

But if you add the following to vcl_recv:

...
if (req.request == "BAN") {
    ban("req.url ~ (?i)" + req.url + "$");
    error 200 "Banned.";
}
...

The magic here is the "$" at the end. Its simple but you can now purge / and ONLY purge the root.
But this opens up for the possibility to purge /.*css and invalidate all your stylesheets.
It's simple regex, but sometimes we fail to see the simple solutions.

Nice huh?