从 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.com
、foo.bar.example.com
或 example.com
return example.com
; example.co.id
用于 www.example.co.id
、foo.bar.example.co.id
-- 或 example.co.id
。这应该有助于您的脚本按预期工作。如果还有问题,请更新OP,我们看看有什么解决办法。
我想使用 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.com
、foo.bar.example.com
或 example.com
return example.com
; example.co.id
用于 www.example.co.id
、foo.bar.example.co.id
-- 或 example.co.id
。这应该有助于您的脚本按预期工作。如果还有问题,请更新OP,我们看看有什么解决办法。