programing

URL 문자열에 "utm_"이 있으면 Wordpress의 $_GET 변수가 끊어집니다.

lovejava 2023. 9. 11. 21:18

URL 문자열에 "utm_"이 있으면 Wordpress의 $_GET 변수가 끊어집니다.

첫번째 메모:이 사이트는 WP Engine(바니쉬 캐싱)에서 호스팅되지만 다른 서버에서 문제를 복제할 수 없는 것 같습니다.

우리는 일부 페이지에서 $_GET php 변수에 접근할 수 있어야 합니다.테스트를 위해 워드프레스 헤더를 수정했습니다.바로 첫번째 줄에 var_layout을 하기 위해 php.

보통은 모든 것이 정상적으로 작동합니다.그러나 URL 문자열에 "utm_"이 포함되어 있으면 $_GET의 모든 후속 변수가 제거됩니다.더 이상한 점은 워드프레스에 로그인하면 모든 것이 정상적으로 작동한다는 것입니다.

Paypal 반품 URL은 다음과 같습니다.

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

utm_nooverride는 $_GET을 빈 배열로 만듭니다."test=1&mx=xxxxyyyyyy"로 변경하면 정상 작동됩니다."utm_test=1"=xxxxyyy"를 사용하면 배열이 다시 비어 있습니다.

.htaccess에는 이상한 점이 없고, 몇 개의 표준 워드프레스 행만 있습니다.

호스트에서 뭔가 원인이 있는 것은 아닐까요?

혹시 다른 분들도 저와 같은 문제가 발생했을 경우를 대비해서 WP Engine 지원팀과 라이브 채팅으로 이야기를 나누었습니다.몇 분 안에 수정했습니다

대화 내용을 간단히 소개합니다.

  • 나: 쿠키에 GET 변수를 넣으려고 하는데 $_SERVER['에 액세스할 때 임의 변수(my_name=bob)에 대해 작동하는 것 같습니다.REQUEST_URI'] 글로벌 변수이지만 어떤 이유로 인해 쿼리 문자열에서 "utm_"으로 시작하는 모든 변수가 제거됩니다.고객님 쪽에 pph/cache config가 있는 것 같은데, 혹시 알고 계신 게 있으신가요?
  • WPE: 좋은 질문입니다. 유감스럽게도 쿼리 내의 특정 Arg를 자동으로 제거하는 방법을 알지 못합니다.이것을 동료들과 함께 검토해 보겠습니다.
  • 나: k. 참고로 스택 오버플로 이슈 http://stack overflow…-get-variable-in-word press.https://twitter.com/ …ey01/status/555584796785528832 다른 사람들의 경험으로도 입증된 것 같습니다.
  • WPE: 설치를 위한 것입니다:?
  • 나:네.
  • WPE: 지금 한번 시도해 보시겠어요?
  • 나: 네, 이제 작동합니다. 무슨 문제가 있었나요?
  • WPE: 훌륭합니다!문제는 "utm_" arg를 기본적으로 제거한다는 것이었습니다.당신이 제안한 주장을 깨닫지 못한 점 사과드립니다.캐싱 시스템에서 이 arg를 제외해야 했습니다.
  • 나: 알겠어요, 그럼 제가 직접 할 수 있는 방법은 없는 거죠?
  • WPE: 맞습니다.

참고용 링크: https://wpengine.com/support/utm-gclid-variables-caching/

WP Engine이 Google Analytics 캠페인 변수를 참조할 때 쿼리 문자열 매개 변수를 무시하도록 Vannish를 잘못 구성했을 수 있습니다.캠페인 변수는 분석 공급자가 읽기 클라이언트 측(서버 측이 아닌)이므로 쿼리 문자열 없이 페이지의 캐시를 참조할 수 있습니다.따라서 서버 측 변수를 무시하는 것은 표면적으로 효과가 없을 것이며 인바운드 Google Analytics 추적을 많이 사용하는 사이트의 성능을 향상시킬 것입니다.

이를 수행하는 방법을 묻는 스택 오버플로 질문이 있기 때문에 가능하다고 생각합니다. "선택 쿼리 문자열 속성/값 쌍을 제거하여 바니쉬가 캐시를 변경하지 않도록 합니다."확실히 알 수 있는 유일한 방법은 WP Engine에 연락하는 것입니다.

저는 현재 WP Engine과 이 문제가 해결되기를 바라며 채팅을 하고 있습니다.

WP Engine의 바니시 캐시는 캐싱을 개선하기 위해 실제로 utm_ 및 gclid_ 매개 변수를 제거합니다.안타깝게도 WP 엔진은 첫 번째 utm_ or gclid_ 파라미터가 식별된 후 모든 후속 쿼리 파라미터를 제거합니다.

예를 들어 URL: 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

autm_ or gclid_ 파라미터가 아님에도 불구하고 page=1 파라미터가 어떻게 제거되는지 주목하십시오.

WP Engine에서 제안하는 해결 방법은 캐시 제외 목록에 utm_과 gclid_를 적용하는 것이지만, 이는 URL에 autm_ 또는 gclid_ 매개 변수가 있을 경우 캐시가 제공되지 않음을 의미합니다.URL에 utm_ 또는 gclid_ 매개 변수가 있는 경우 전자 메일에서 온 것일 가능성이 높으며, 대용량 전자 메일 발송은 캐시된 페이지를 제공하려는 정확한 시점에 트래픽이 급증한다는 것을 의미합니다.

아래는 utm_ 또는 gclid_가 URL에 있는지 감지하고 utm_ 및 gclid_ 매개 변수가 쿼리 문자열 끝에 있도록 URL을 재정렬한 다음 페이지 리디렉션을 트리거하는 일부 자바스크립트입니다.아래 코드는 FormAssembly 리디렉션을 통해 URL 끝에 추가되는 매개 변수인 tfa_next라는 매개 변수를 찾습니다.아래 코드는 좀 더 일반적으로 사용할 수 있도록 개선될 수도 있겠지만, 필요하신 분들께 출발점이 되었으면 좋겠습니다.

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);
    }

  }
}

언급URL : https://stackoverflow.com/questions/21567004/having-utm-in-the-url-string-breaks-the-get-variable-in-wordpress