【问题标题】:Ignore utm_* values with varnish?用清漆忽略 utm_* 值?
【发布时间】:2014-06-14 17:27:55
【问题描述】:

我可以在从缓存中提取匹配对象之前“忽略”查询字符串变量,但实际上不能将它们从 URL 中删除给最终用户吗?

例如,所有营销utm_sourceutm_campaignutm_* 值不会改变页面的内容,它们只是因广告系列而异,并且被我们所有的客户端使用跟踪。

所以这也意味着 URL 不能在客户端更改,但它应该以某种方式在缓存中“标准化”。

基本上我想要所有这些......

http://example.com/page/?utm_source=google

http://example.com/page/?utm_source=facebook&utm_content=123

http://example.com/page/?utm_campaign=usa

...所有访问HIT缓存http://example.com/page/

但是,此 URL 会导致 MISS(因为参数不是 utm_* 参数)

http://example.com/page/?utm_source=google&variation=5

会触发缓存

http://example.com/page/?variation=5

另外,请记住,用户看到的 URL 必须保持不变,我无法重定向到没有参数或任何类似解决方案的东西。

【问题讨论】:

    标签: caching url-rewriting varnish varnish-vcl


    【解决方案1】:

    所以我要添加一个免责声明,这个正则表达式可能并不完美,但它应该工作得很好:

    sub vcl_recv {  
      set req.url = regsuball(req.url, "\?(utm_[^=&]*=[^&=]*&?)+", "?");
      set req.url = regsuball(req.url, "&(utm_[^=&]*=[^&=]*(&|$))+", "\2");
      set req.url = regsub(req.url, "\?$", "");
    
      return (pass);
    }
    

    这应该会删除所有以utm_ 开头的查询参数。我使用了三个正则表达式使其更清晰、更易于阅读。

    第一个regsuball 删除查询字符串开头的所有utm_ 参数。它在? 之后立即查找一个或多个utm_ 参数。第二个regsuball 删除所有不在查询字符串开头的utm_ 参数。

    如果在我们删除 utm_ 参数后没有剩余查询参数,第三个正则表达式将通过删除 ? 来清理 URL。

    两个正则表达式都需要在()+ 中,因为这将匹配一个或多个连续的utm_ 参数(否则它们不会匹配)。

    示例结果:

    Source URL: /?utm_track=1&utm_test2=hey&test=utm_blah&utm_source=google&variation=5&utm_query=abc&utm_test7=yes
    Maps to:    /?test=utm_blah&variation=5
    
    Source URL: /?variation=5&utm_test1=abc&utm_test2=def&blah=1
    Maps to:    /?variation=5&blah=1
    

    【讨论】:

    • 这个[^&=] 不会处理其中有= 符号的utm_ 参数(想象一下?utm_track=foo=bar,我相信。= 符号在URI 的查询部分是合法的,即使web表单通常会逃脱它们。伪造 UTM 负载 URI 的人(或广告网络)可能不会。我会将 [^&=] 替换为 [^&],因为您想删除整个查询参数,直到下一个查询参数。
    【解决方案2】:

    这成功了......根据我自己的问题,它并不完美,因为它忽略了所有查询参数,而不仅仅是 utm 的。当我需要实际实现一个改变内容的非 utm 值时,我需要重新访问这个正则表达式:

    sub vcl_recv {
        set req.url = regsub(req.url, "\?.*", "");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-19
      • 2011-05-15
      • 2018-10-03
      • 1970-01-01
      • 2018-03-01
      • 2013-08-26
      相关资源
      最近更新 更多