我如何以特定的顺序重定向我的网页


How can I redirect my webpage in a specific order?

我正在寻找一种方法来重定向我的网页到两个url顺序,这可能是在PHP,但如果你有任何其他的想法,请打我!它应该是这样工作的:

Visitor 1 -> redirect to site1.com
visitor 2 -> redirect to site2.com
visitor 3 -> redirect to site1.com
visitor 4 -> redirect to site2.com

我想你已经明白了:)

你需要所谓的'轮询'。

在每个基于当前位置的访问者重定向中。这受制于竞争条件,但对于目的来说可能无关紧要:

// Suggested location for RR counter
define('ROUND_ROBIN_FILE', '/tmp/site-counter.txt');
// Here's your queue
$possibleRedirects = array('site1.com', 'site2.com', 'site3.com');
// Get the current position
$position = file_get_contents(ROUND_ROBIN_FILE);
if (empty($position)) {
     $position = 0;
}
$position = ($position + 1) % count($possibleRedirects);
// Save the current position
file_put_contents($position, ROUND_ROBIN_FILE);

我的意思是"轮询"是你有一个队列系统,你存储所有可用的重定向url。当用户1访问页面时,从队列/堆栈中删除最后一个重定向URL并重定向用户。将此操作保存在数据库中,可以是整个URL,也可以是@halfer建议的方式。

然后用户2访问,你检查你的队列是否为空,如果它不是空的,然后从队列中删除另一个URL,重定向用户2并保存在数据库中。如果queue为空,则将队列重置为所有可用的重定向并重置数据库。

这样做的主要问题是你需要关于上一个访问者的信息。

为此,您需要跟踪每个访问者被重定向到的内容,以便下一个访问者可以访问该信息。

如果你只有一个web服务器,这很容易。为奇数访问创建一个空文件,为偶数访问删除它。

 // Untested code, just to give the general idea
$trackingFile='/usr/share/whatever/oddvisit';
if(file_exists($trackingFile)){
    // even visitor
    unlink($trackingFile);
    Header('Location: http://url2.com');
    exit;
}else{
    // odd visitor
    touch($trackingFile);
    Header('Location: http://url1.com');
    exit;
}

如果你有多个web服务器,这有点棘手。

如果你没有NFS,你的所有web服务器都可以访问,你可以将奇数/偶数信息存储在数据库中。但是最好不要有大量的流量。

如果你有很多流量,我认为最好的解决方案是接受每个web服务器将重定向访问者,他们得到,独立于其他web服务器做什么。对于非常大的数字,您应该获得相当不错的50/50重定向。