Excellent, cheers!
I get that there isn’t an example of it being used to match file extensions, but I don’t think the absence of an example suggests it doesn’t work. Otherwise, that would suggest that :placeholder
doesn’t work at all, since there isn’t a single example of it on that page. I don’t think that’s the case, and I don’t think that’s how folks interpret documentation.
I think it’s better to explain how it works, rather than give an incomplete description, then try and fill in the gaps with exceptions. If I’ve understood how it works correctly, I think this describes it:
You can use
*
at the end of a pattern to match anything that appears afterwards. This makes the pattern a “starts with” match. So/foo/*
will match any URL that starts with/foo/
, including/foo/
itself, but also/foo/bar/
and/foo/hello/world/yo.html
.Warning: Although
*
can only be used at the end of a pattern, Netlify does not validate this. Instead, any pattern characters after the first*
are simply discarded. Netlify will silently accept a rule like/posts/*.jpg
, but it will not behave as you intend. It will be interpreted as/posts/*
, so the rule will apply for/posts/cat.jpg
, but it will also apply for/posts/data.json
.
You need a strong warning here, because no one would include a rule like /posts/*.jpg
expecting the .jpg
to be ignored.
You wouldn’t need the strong warning if Netlify caught the issue at build time, and failed the build with a message like “Header rule error: *
can only appear at the end of a pattern, see [url] for more details”.
This is my preference, as I would have discovered the issue at build time, rather than in production.
Netlify App - in this deploy I had a header rule like /*.c.*
, which is being reinterpreted as /*
without warning.
Cheers! I’ll put all that in a separate reply.