从网址中删除fbclid(如果存在)

时间:2019-01-22 07:26:22

标签: php

我有示例代码:

$var = $_GET['myurl'];

我的示例网址

https://mydomain/sample/value-2019?fbclid=xxxxxxxxxxxx

or

https://mydomain/sample/value-2019?date=2018&fbclid=xxxxxxxxxxxx


or 

https://mydomain/sample/value-2019?fbclid=xxxxxxxxxxxx&id=10
or

https://mydomain/sample/value-2019?x=xyz


or etc...

$ _ GET ['myurl']-是我实际的URL地址。

我需要检查$ var参数是否为fbclid-如果是,请将其删除。

例如:

来自

$var = 'https://mydomain/sample/value-2019?date=2018&fbclid=xxxxxxxxxxxx'

我想要拥有:

$var = 'https://mydomain/sample/value-2019?date=2018'

重要提示: fbclid参数并不总是出现,因此我首先需要检查URL中是否可用。

如何做到?

3 个答案:

答案 0 :(得分:1)

<?php

$urls = array(
        "https://mydomain/sample/value-2019?fbclid=xxxxxxxxxxxx",
        "https://mydomain/sample/value-2019?date=2018&fbclid=xxxxxxxxxxxx",
        "https://mydomain/sample/value-2019?fbclid=xxxxxxxxxxxx&id=10",
        "https://mydomain/sample/value-2019?x=xyz"
);

function strip_fbclid($url) {
        $patterns = array(
                '/(\?|&)fbclid=[^&]*$/' => '',
                '/\?fbclid=[^&]*&/' => '?',
                '/&fbclid=[^&]*&/' => '&'
        );

        $search = array_keys($patterns);
        $replace = array_values($patterns);

        return preg_replace($search, $replace, $url);
}

foreach($urls as $url) {
        echo "URL: " . $url . "\n";
        echo "REP: " . strip_fbclid($url) . "\n";
}

如果我们在每次运行函数时都没有定义和解析模式/搜索/替换URL,则可以使此代码更高效,但这应该行得通吗?

答案 1 :(得分:0)

这似乎对我有用:

    $actual_link=(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http");
    $actual_link.="://$_SERVER[HTTP_HOST]$_SERVER[SCRIPT_NAME]";
    foreach($_GET as $key => $value) if($key!='fbclid') {
      if(isset($args)) $args.="&$key=$value";
      else $args="?$key=$value";
    }
    $actual_link.=$args;

答案 2 :(得分:0)

有一个简单的方法来做这个服务器端。 当然,它只适用于 GET 或 HEAD,不适用于请求有正文(即:POST PUT 等...)

这里以 nginx 为例(请注意,这是有效的,因为 fbclid 始终附加到查询字符串)

map $request_uri $redirect_fbclid {
  "~^(.*)(?:[?&]fbclid=[a-zA-Z0-9_-]+)$"  $1;
}

if ( $redirect_fbclid ) {
  return 301 $redirect_fbclid;
}

对于 apache,可以使用 mod_rewrite 来完成

RewriteEngine On

RewriteCond %{QUERY_STRING} ^(.+?&|)fbclid=[^&]*(?:&(.*)|)$
RewriteRule ^ %{REQUEST_URI}?%1%2 [R=301,L]