PHP 将访问者分成两个不同的 url

PHP split the visitors to two different urls

我正在开发我的 PHP 脚本,将访问者分成 2 个不同的 url,就像我这样做是为了进行拆分测试,以查看哪个网站转换效果最好。

示例:http://clicks.domain.com/439aa03e2de3e7fd95cb7cb28a4396c519c129eb0cef4f7b3ca48c43effd3269a8706f1bd0e3e33813929f8570f37fc32963e5715d020d38f38e60856c21b2ea

当用户单击 link 时,第一个用户将转到站点 A www.siteA.com,第二个用户将转到站点 B www.siteB.com,第三个用户将转到到站点 A 等等。

代码如下:

<?php


//Connect to the database
include('config.php');

$url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

if (!empty($url))
{
    $clicked_query = $link->prepare('SELECT clicked_today, campaign from tracking WHERE link = ? LIMIT 1');
    $clicked_query->execute([$url]);


    if ($clicked_query->rowCount() == 1)
    {
        $split_test_query = $link->prepare('SELECT site_A, site_B, campaign from split_test WHERE link = ? LIMIT 1');
        $split_test_query->execute([$url]);
        $row = $split_test_query->fetch(PDO::FETCH_ASSOC)
        $split_url_A = $row['site_A'];
        $split_url_B = $row['site_B'];

        if ($split_url_A !== site_B)
        {
            $split_test_query = $link->prepare('UPDATE split_test SET site_A = 1 WHERE id = ?');
            $split_test_query->execute([$id]);

            //User will visit Site A
            header('Location: http://www.sitea.com');
        }
        else
        {
            $split_test_query = $link->prepare('UPDATE split_test SET site_B = 1 WHERE id = ?');
            $split_test_query->execute([$id]);

            //User will visit Site B
            header('Location: http://www.siteb.com');
        }

        //Close connection
        $split_test_query = null;
    }

    //Close connection
    $$clicked_query = null;
}

我在数据库中存储了 2 个不同的 url,所以我的问题是我是否必须使用数据库来更新值以允许我控制用户将访问哪个站点?

是这样吗?或者我可以使用 .htaccess 来做到这一点?

我试图在 google 上找到答案,但找不到。

谢谢。

总的来说,这个方法是可以的。不过,我建议不要依赖 URL,而是依赖跟踪 table 中的 ID。此外,决定是去站点 A 还是 B 的条件很奇怪 if ($split_url_A !== site_B)。我只会使用 rand(1,2) 并根据该选择合适的网站。

编辑:

这样的事情可以为您决定您需要哪个站点,然后您只需要一个 SELECT 查询来找到合适的 link 和一个 UPDATE 查询来更新合适的站点.

$choices = [1 => 'site_A', 2 => 'site_B'];
$siteKey = rand(1,2);
$goToSite = $choices[$siteKey];