varnish regex
    Michael Alger 
    varnish at mm.quex.org
       
    Thu Nov 11 04:05:36 CET 2010
    
    
  
On Wed, Nov 10, 2010 at 11:56:43AM -0500, Vitaly Burshteyn wrote:
> 
> I have a set of url's that I need to make sure that varnish does
> [not] cache.  The url patern looks like this:
> 
> Siteurl/r/anynumber
> 
> if (req.url ~ "/r/*/") {
> 
>         return(pass);
> 
>     }
That looks more like a glob/wildcard match than a regex, and won't
do what you want.
> Or 
> 
> if (req.url ~ "^/r/\d+/$") {
> 
>         return(pass);
> 
>     }
The above is what you want, assuming nothing else can come after the
"anynumber", but there's _always_ a slash after it. If the slash
actually isn't _ever_ present, then just use
  if (req.url ~ "^/r/\d+$") {
If the slash may or may not be present, then
  if (req.url ~ "^/r/\d+/?$") {
may be better. If there's also the possibility of additional things
after the number, such as a query string, and you want to avoid caching
those as well, then I'd just drop the $ at the end:
  if (req.url ~ "^/r/\d+") {
> Sorry about this question, but I am not sure how varnish processes
> regex values.
Varnish switched to pcre in 2.1.x I think; prior to that, regular
expressions were case-insensitive by default. So you should check
what version you're running if that matters to you. Current releases
are case-sensitive by default, so if your backend isn't then you can
use the (?i) syntax to make the expression case-insensitive:
  if (req.url ~ "(?i)^/r/\d+/?$") {
    
    
More information about the varnish-misc
mailing list