diff --git a/src/vmod_querymodifier.c b/src/vmod_querymodifier.c index cd115a6..8300750 100644 --- a/src/vmod_querymodifier.c +++ b/src/vmod_querymodifier.c @@ -298,3 +298,14 @@ VCL_STRING vmod_excludeparams(VRT_CTX, VCL_STRING uri, VCL_STRING params) { return vmod_modifyparams(ctx, uri, params, 1); } + +/** + * Exclude all query parameters from the URL. + * @param ctx The Varnish context. + * @param uri The URL to modify. + * @return The modified URL. + */ +VCL_STRING +vmod_excludeallparams(VRT_CTX, VCL_STRING uri) { + return vmod_modifyparams(ctx, uri, NULL, 1); +} diff --git a/src/vmod_querymodifier.vcc b/src/vmod_querymodifier.vcc index bb9953c..2abaa18 100644 --- a/src/vmod_querymodifier.vcc +++ b/src/vmod_querymodifier.vcc @@ -38,3 +38,13 @@ Example :: set req.url = querymodifier.includeparams(req.url, "ts,v"); + +$Function STRING excludeallparams(STRING url) + +Description + The function excludes all parameters in the URL. + +Example + :: + + set req.url = querymodifier.excludeallparams(req.url); diff --git a/src/vtc/all_params_exclusion.vtc b/src/vtc/all_params_exclusion.vtc new file mode 100644 index 0000000..c519fbc --- /dev/null +++ b/src/vtc/all_params_exclusion.vtc @@ -0,0 +1,28 @@ +varnishtest "Test querymodifier vmod for all params exclusion" + +server s1 { + rxreq + txresp -body "OK1" + expect req.url == "/feed/" +} -start + +varnish v1 -vcl+backend { + import std; + import querymodifier; + + sub vcl_recv { + std.syslog(180, "querymodifier before: " + req.url); + set req.url = querymodifier.excludeallparams(url=req.url); + std.syslog(180, "querymodifier after: " + req.url); + } +} -start + +client c1 { + txreq -url "/feed/?id=1&d=2&another=3" + rxresp + expect resp.status == 200 +} -run + +varnish v1 -expect n_object == 1 +varnish v1 -expect cache_miss == 1 +varnish v1 -expect cache_hit == 0