【问题标题】:Having "utm_" in the URL string breaks the $_GET variable in WordpressURL 字符串中包含“utm_”会破坏 Wordpress 中的 $_GET 变量
【发布时间】:2014-03-01 06:42:08
【问题描述】:

第一个注意事项:此站点托管在 WPEngine(清漆缓存)上,但我似乎无法在另一台服务器上复制该问题。

我们需要能够访问某些页面上的 $_GET php 变量。为了测试,我修改了我们的 Wordpress header.php,在第一行做一个 var_dump。

通常,一切正常。但是,如果 URL 字符串包含“utm_”,则 $_GET 中的每个后续变量都会被删除。更奇怪的是,如果我登录到 Wordpress,一切正常。

我们的 Paypal 返回 URL 如下所示:

http://oururl.com/buy/thankyou/?utm_nooverride=1tx=xxxxyyyy...

utm_nooverride 导致 $_GET 为空数组。如果我将其更改为“test=1&tx=xxxxyyyy”,它可以正常工作。如果我使用“utm_test=1&tx=xxxxyyyy”,我会再次得到一个空数组。

.htaccess 中没有什么奇怪的,只有几个标准的 Wordpress 行。

主机中会不会有什么东西导致了这种情况?

【问题讨论】:

  • 您可能想直接使用 google ga 对象并发送提取的 URL 变量

标签: php wordpress varnish


【解决方案1】:

我目前正在与 WPEngine 聊天,希望能解决这个问题。

WPEngine 的清漆缓存实际上去除了 utm_ 和 gclid_ 参数以改进缓存。遗憾的是,在识别出第一个 utm_ 或 gclid_ 参数后,WPEngines 实现此“功能”会去除所有后续查询参数。

例如网址: www.example.com/test/?foo=bar&utm_source=email&page=1

您希望您的服务器收到的内容: www.example.com/test/?foo=bar&page=1

您的服务器实际收到的内容: www.example.com/test/?foo=bar

请注意 page=1 参数是如何被删除的,即使它不是 utm_ 或 gclid_ 参数。

WPEngine 建议的解决方法是将 utm_ 和 gclid_ 应用于缓存排除列表,但这意味着如果您的 url 中有 utm_ 或 gclid_ 参数,则不会提供缓存。这似乎不太理想,因为如果 URL 具有 utm_ 或 gclid_ 参数,它很可能来自电子邮件,并且发送大量电子邮件意味着流量激增,而这正是您想要提供缓存页面的时候。

下面是一些 javascript,它检测 utm_ 或 gclid_ 是否在 URL 中,如果是,它会重新排列 url,以便 utm_ 和 gclid_ 参数位于查询字符串的末尾,然后触发页面重定向。下面的代码专门查找名为 tfa_next 的参数,该参数是通过 FormAssembly 重定向添加到 URL 末尾的参数。下面的代码可以改进为更通用,但我希望它可以作为任何需要它的人的起点。

const params = new URLSearchParams(window.location.search);
var newParams = "";
console.log("This is working");
if(params.has('tfa_next')){
  console.log("it has a tfa_next param");
  if(window.location.href.includes("UTM_") || window.location.href.includes("utm_") || window.location.href.includes("GCLID_") || window.location.href.includes("gclid_")){
    console.log("it has a utm param");
    var count = 0;
    for(const [key, value] of params) {
      if(count == 0 && key == "tfa_next"){
        break;
      } else {
        count += 1;
      }
      if(key.includes("UTM_") || key.includes("utm_") || key.includes("GCLID_") || key.includes("gclid_")){
        newParams = newParams + key + "=" + encodeURIComponent(value) + "&";
      } else {
         newParams = key + "=" + encodeURIComponent(value) + "&" + newParams;
      }
      console.log("NewParams: " + newParams);
    }
    if(newParams.slice(newParams.length - 1) == "&"){
      newParams = newParams.slice(0, newParams.length - 1);
      console.log("final query string: " + newParams);
    }
    if (count > 0) {
        console.log("end result: " + window.location.protocol + "//" + window.location.hostname + window.location.pathname + "?" + newParams);
     window.location.replace(window.location.protocol + "//" + window.location.hostname + window.location.pathname + "?" + newParams);
    }

  }
}

【讨论】:

    【解决方案2】:

    如果其他人遇到同样的问题,就像我刚才所做的那样,我通过实时聊天与 WPEngine 支持团队进行了交谈。他们在几分钟内纠正了它

    这是我们聊天的简短记录:

    • 我:我正在尝试将一些 GET 变量放入 cookie 中,当访问 $_SERVER['REQUEST_URI'] 全局变量时,它似乎适用于任意变量(如 my_name=bob),但出于某种原因正在删除查询字符串中以“utm_”开头的内容。似乎是您身边的 php/cache 配置,您对此有什么了解吗?
    • WPE:好问题;不幸的是,我不知道有任何东西会自动删除查询中的特定参数。让我和一些同事一起回顾一下。
    • 我:k。仅供参考,这是一个堆栈溢出问题http://stackoverflow...-the-get-variable-in-wordpress。似乎也被其他人的经验所证实:https://twitter.com/…ey01/status/555584796785528832
    • WPE:这是为您的安装准备的:?
    • 我:是的
    • WPE:我可以请你现在试试吗?
    • 我:好的,现在可以了。出了什么问题?
    • WPE:太好了!问题是我们默认去掉了“utm_”参数。我很抱歉没有意识到你建议的 arg。我不得不从我们的缓存系统中排除这个 arg。
    • 我:好的,所以我自己不可能做到这一点,对吧?
    • WPE:没错。

    参考链接:https://wpengine.com/support/utm-gclid-variables-caching/

    【讨论】:

    • 糟糕,在提出这个问题后不久,我就与他们进行了确切的对话,却忘了在这里发帖。谢谢队友:)
    • 谢谢,这对我的网站有帮助 hosted on GoDaddy
    【解决方案3】:

    WP 引擎可能已(错误)配置 Varnish 以在引用 Google Analytics(分析)广告系列变量时忽略查询字符串参数。他们可能已经这样做了,因此他们可以在没有查询字符串的情况下引用页面的缓存,因为活动变量是由分析提供商在客户端(而不是服务器端)读取的。因此,在服务器端忽略这些变量表面上不会产生任何影响,并且会提高大量使用入站 Google Analytics(分析)跟踪的网站的性能。

    我说这是可能的,因为有一个 Stack Overflow 问题询问如何做到这一点:"Stripping out select querystring attribute/value pairs so varnish will not vary cache by them"。唯一确定的方法是联系 WP Engine。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-02
      • 2013-08-14
      • 1970-01-01
      • 2014-05-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-12
      • 2015-09-23
      相关资源
      最近更新 更多