首页 > 解决方案 > 从 URL/主机中删除子域以匹配附属链接数组中的域

问题描述

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

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

如果有人能帮助我解决这个问题,我将不胜感激。

提前致谢

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

<?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
?>

标签: phparraysredirectsubdomainaffiliate

解决方案


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

$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',  '\1\2', $host);

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

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

然后我们用匹配域的捕获组的内容替换主机名。及其扩展。这将返回example.com, www.example.com--foo.bar.example.comexample.com; example.co.id对于, www.example.co.id--foo.bar.example.co.idexample.co.id. 这应该有助于您的脚本按预期工作。如果还有其他问题,请更新 OP,我们将查看可用的解决方案。


推荐阅读