簡體   English   中英

保留外部網址的查詢字符串

[英]Keep query string for external urls

可以使用查詢字符串通過一些推薦 id 將用戶發送到主網站:

www.site.com/?ref=XXX

當他們單擊登錄區域的鏈接時,此查詢字符串必須與該外部鏈接一起使用:

https://internal.site.com?ref=XXX

我正在使用 wordpress,所以我不能將?ref=<?php echo $_GET['ref']?>附加到該鏈接。

我已經將.htaccess更改為:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php - [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L,QSA]
</IfModule>

返回主網站的每個鏈接都會保留查詢字符串,但外部 URL 不會。

www.site.com?ref=XXX [original]
www.site.com/go/reds?ref=XXX [query strings are kept]
https://internal.site.com [query strings are removed]

htaccess中的QSA標志應該可以解決問題,但它不適用於外部鏈接。

您可以通過在頁面末尾添加此腳本來完成此操作。 此代碼將變量傳遞給客戶端的每個鏈接。

<p><a href="/about/">Internal</a></p>
<p><a href="https://google.com">External</a></p>
<p><a href="/post/?id=1">Link with query string</a></p>

<script>
    var index = window.location.href.indexOf('?')
    if(index != -1){
        var querystring = window.location.href.slice(index + 1)
        var tagA = document.getElementsByTagName('a');

        for(var i = 0; i < tagA.length; i++){
            var href = tagA[i].getAttribute('href');

            href += (href.indexOf('?') != -1)? '&' : '?';
            href += querystring;

            tagA[i].setAttribute('href', href);
        }
    }
</script>

要在每次調用 the_permalink() 函數時應用自定義查詢,您可以使用此過濾器

function append_query_string($url) {
    if (isset($_GET['ref'])) {
        $url = add_query_arg('ref', $_GET['ref']);
    }
    return $url;
}
add_filter('the_permalink', 'append_query_string');

但它可能是不方便的選項,因為它僅適用於使用 the_permalink 函數生成的鏈接,因此您還必須將此函數應用於菜單、帖子類型存檔鏈接,以及通常在沒有 wp 永久鏈接的情況下生成鏈接的地方功能。

另一種解決方案是將引用存儲在會話 cookie 或 $_SESSION 全局中:在這種情況下,每次用戶瀏覽器關閉時引用都會丟失,因此如果用戶在被引用后手動返回您的站點,您也可以跟蹤引用.

希望能幫助到你 :)

$queryString = "";
$x = 0;
foreach($_GET as $key=>$value){
    $queryString[$x]= "&$key=$value;
    $x++;
}
$url = $url."?".implode("&",$queryString);

這是一個簡單可行的js函數來完成這個:

function addQueryParamsToLinks() {
  const links = document.getElementsByTagName("a");
  const queryParams = window.location.search;
  for (const link of links) {
    link.setAttribute("href", `${link.getAttribute("href")}${queryParams}`);
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM