Remove query parameter
Ole Laursen
olau at iola.dk
Thu Jun 17 19:01:18 MSD 2010
Barry Abrahamson <barry at ...> writes:
> On Jun 16, 2010, at 11:28 PM, Igor Sysoev wrote:
>
> > There is no way to remove a parameter, however, you can to define
> > cache key without a query string at all or with predefined parameters only:
> >
> > proxy_cache_key $proxy_host$uri;
> > or
> > proxy_cache_key $proxy_host$uri?$arg_one&$arg_two;
>
> The ability to blacklist specific args from the cache key would be a nice
feature :)
Indeed. Thanks for the answers!
I've figured out how to do remove parameters with the set $args syntax, it's not
pretty though. Would be trivial to do with a parser, but less trivial with
regexp, I basically remove each unwanted GET parameter one-by-one and then fixup
any stray & afterwards:
# remove GET parameters
if ($args ~ (.*)utm_source=[^&]*(.*)) {
set $args $1$2;
}
if ($args ~ (.*)utm_medium=[^&]*(.*)) {
set $args $1$2;
}
if ($args ~ (.*)utm_campaign=[^&]*(.*)) {
set $args $1$2;
}
if ($args ~ (.*)gclid=[^&]*(.*)) {
set $args $1$2;
}
# cleanup any repeated & introduced
if ($args ~ (.*)&&+(.*)) {
set $args $1&$2;
}
# cleanup leading &
if ($args ~ ^&(.*)) {
set $args $1;
}
# cleanup ending &
if ($args ~ (.*)&$) {
set $args $1;
}
Then proxy_pass and proxy_cache_key must reference $args, thankfully $is_args
appears to work even when changing $args above :)
location / {
proxy_pass http://127.0.0.1:1234$uri$is_args$args;
proxy_cache_key "$scheme$host$uri$is_args$args";
...
}
Ole
More information about the nginx
mailing list