从 URL/host 中删除子域以匹配附属 link 数组中的域

Remove subdomain from URL/host to match domains in affiliate link array

我想使用 php 制作一个重定向文件,它可以自动将附属标签添加到所有 link。喜欢它的工作原理 https://freekaamaal.com/links?url=https://www.amazon.in/ .

如果我打开上面的 link 它会自动将附属标签添加到 link 并且打开的最终 link 是这个'https://www.amazon.in /?tag=freekaamaal-21' Flipkart 和许多其他网站也是如此。 它会自动将附属标签添加到各种 link 中。例如亚马逊、Flipkart、ajio等

如果有人能帮助我,我将不胜感激。

提前致谢

现在我在下面做了这个代码,但问题是有时 link 有额外的子域,例如 https://dl.flipkart.com/ or https://m.shopclues.com/ 等,对于这些类型 links 它不会从数组重定向而不是这个它重定向到默认 link.

<?php
$subid = isset($_GET['subid']) ? $_GET['subid'] : 'telegram'; //subid for external tracking
$affid = $_GET['url']; //main link
$parse = parse_url($affid);
$host = $parse['host'];
$host = str_ireplace('www.', '', $host);

//flipkart affiliate link generates here

$url_parts = parse_url($affid);
$url_parts['host'] = 'dl.flipkart.com';
$url_parts['path'] .= "/";
if(strpos($url_parts['path'],"/dl/") !== 0) $url_parts['path'] = '/dl'.rtrim($url_parts['path'],"/");

$url = $url_parts['scheme'] . "://" . $url_parts['host'] . $url_parts['path'] . (empty($url_parts['query']) ? '' : '?' . $url_parts['query']); 
      $afftag = "harshk&affExtParam1=$subid"; //our affiliate ID
                  if (strpos($url, '?') !== false) {
                  if (substr($url, -1) == "&") {
                  $url = $url.'affid='.$afftag;
                  } else {
                  $url = $url.'&affid='.$afftag;
                  }
                  } else { // start a new query string
                  $url = $url.'?affid='.$afftag;
                  }
                            $flipkartlink = $url;
 //amazon link generates here
                            
 $amazon = $affid;
 $amzntag = "subhdeals-21"; //our affiliate ID
 if (strpos($amazon, '?') !== false) {
                    if (substr($amazon, -1) == "&") {
                    $amazon = $amazon.'tag='.$amzntag;
                    } else {
                    $amazon = $amazon.'&tag='.$amzntag;
                    }
                    } else { // start a new query string
                    $amazon = $amazon.'?tag='.$amzntag;
                    }
                }
                $amazonlink = $amazon;
$cueurl = "https://linksredirect.com/?subid=$subid&source=linkkit&url="; //cuelinks deeplink for redirection
$ulpsub = '&subid=' .$subid; //subid
$encoded = urlencode($affid); //url encode

$home = $cueurl . $encoded; // default link for redirection.

$partner = array( //Insert links here
"amazon.in" => "$amazonlink",
"flipkart.com" => "$flipkartlink",
"shopclues.com" => $cueurl . $encoded,
"aliexpress.com" => $cueurl . $encoded,
"ajio.com" => "https://ad.admitad.com/g/?ulp=$encoded$ulpsub",
"croma.com" => "https://ad.admitad.com/g/?ulp=$encoded$ulpsub",
"myntra.com" => "https://ad.admitad.com/g/?ulp=$encoded$ulpsub",
);

$store = array_key_exists($host, $partner) === false ? $home : $partner[$host]; //Checks if the host exists if not then redirect to your default link

header("Location: $store"); //Do not changing
exit(); //Do not changing
?>

感谢您使用现有代码更新您的答案并解释实际问题所在。由于附属链接的参考数组是按基域索引的,因此我们需要规范化主机名以删除任何可能的子域。现在你有:

$host = str_ireplace('www.', '', $host);

显然,只有当子域是 www. 时,才会完成这项工作。现在,人们可能会想通过 . 简单地 explode 并获取最后两个组件。但是,您的 .co.id 和其他二级域会失败。我们最好使用正则表达式。

可以设计一个通用的正则表达式来处理所有可能的二级域 (co., net., org.; edu.,...) 但那会变成一长串。对于您的用例,由于您的列表目前只有 .com.in.co.in 域扩展,并且不太可能有更多,我们将把它们硬编码到使事情变得快速和简单的正则表达式:

$host = preg_replace('#^.*?([^.]+\.)(com|id|co\.id)$#i',  '', $host);

解释我们使用的正则表达式:

  • ^ 主题开始锚点;
  • .*? 任意字符的非贪婪可选匹配(如果存在子域 -- 或子域);
  • ([^.]+\.). 字符后跟 .(主域名)
  • 的捕获组
  • (com|id|co\.id) 域扩展捕获组(根据需要添加到列表)
  • $ 主题结尾锚点

然后我们将主机名替换为与域匹配的捕获组的内容。及其延伸。这将为 www.example.comfoo.bar.example.comexample.com return example.comexample.co.id 用于 www.example.co.idfoo.bar.example.co.id -- 或 example.co.id。这应该有助于您的脚本按预期工作。如果还有问题,请更新OP,我们看看有什么解决办法。