繁体   English   中英

重定向基于URL的域

[英]Redirect based on Domain at URL-Variable

我目前正在为我的会员网站开发新的链接系统。 但是,即使我一直管理它,我在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/ ”。 如果网址“ example.net/ref.php?url= http://example.nl/ ”指向“ affiliate_network.de/encoded_url=http%3A%2F%2Fexample.nl%2F”,希望至少有一点点了解。感谢您的帮助!

为了更好的理解:

将网址发送到此函数中,它将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;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM