基于URL-Variable的域重定向

时间:2017-07-20 18:10:10

标签: javascript php html affiliate

我目前正在为我的联属网站开发一个全新的链接系统。但是,我在PHP领域仍然相对缺乏经验,尽管我一直都在管理它。会员链接具有不同的结构,我想通过PHP创建一个URL,这些URL随结构自动提供。我无法很好地描述它,但我仍然尝试一个例子:

用户X输入URL“example.net/ref.php?url=NORMAL_URL”,并根据“NORMAL_URL”中的域应用结构。例如,“?Aff = XYZ”被添加到URL“example.net/ref.php?url=http://example.de/”。如果URL“example.net/ref.php?url=http://example.nl/”被定向到“affiliate_network.de/encoded_url=http%3A%2F%2Fexample.nl%2F,我希望你至少拥有它一点点了解。谢谢你的帮助!

For a better understanding:

1 个答案:

答案 0 :(得分:0)

将网址发送到此函数,它使用带有here正则表达式的preg_match来提取域部分。
$matches将是一个包含元素1中的域的数组,因此您可以使用$matches[1]找到它 此函数检查数组是否为空(未找到域),并在这种情况下返回null 然后,它使用开关将匹配的域与您可以指定的域列表进行比较,如果列出的域都不匹配,则它将再次返回null

在每种情况下,我只需输入一个返回值,但您可以有创意,并在那里做任何您希望按照应用程序需要的方式构建URL。

我建议而不是将重定向放在此函数中,这在以后维护应用程序时会出现语义混乱。您应该检查函数的返回值,如果它不是null,则重定向到返回值。如果它为null,那么您可以执行其他操作(例如显示错误)

function getReturnFromURL($url) {
    $matches = null;
    preg_match("/^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^:\/\n]+)/im", $url, $matches);
    if (empty($matches)) return null;
    switch ($matches[1]) {
        case "ebay.de":
            return "ebay-network.de/XXX?encoded_url=the_encoded_?-{$matches[1]}";
            break;
        case "amazon.de":
            return "amazon.de/XXX?encoded_url=the_encoded_?-{$matches[1]}?tag=XYZ";
            break;
        default:
            return null;
    }
}