Php 如何按特定顺序重定向我的网页?

Php 如何按特定顺序重定向我的网页?,php,redirect,Php,Redirect,我正在寻找一种方法来重定向我的网页到两个网址的顺序,这可以在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 我想你明白了:)你需要所谓的“循环制” 在每个访问者中,根据当前位

我正在寻找一种方法来重定向我的网页到两个网址的顺序,这可以在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并保存在数据库中。如果队列为空,请将队列重置为所有可用重定向并重置数据库。

主要问题是您需要有关前一个访问者的信息

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

如果您只有一个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服务器,这就有点棘手了

如果没有所有Web服务器都可以访问的NFS,则可以将奇数/偶数信息存储在数据库中。但是如果你没有大量的交通,那就最好了


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

如果访问者1标题位置站点1,如果访问者2标题位置站点2等等……否。我没想到。请解释清楚。这样做有什么意义?我想知道,您似乎正在尝试创建负载平衡器。对于这样简单的事情,您可能只需要保留一个命中率并重定向到不同的服务器,如
$hitcount%2==0?'site1':'site2'
请在发布之前研究此页面:您如何记录当前站点指针?您需要一些持久性存储(文件、数据库、memcache)来完成此操作,否则,
array\u pop($possibleRedirects)
将为每个请求获取第一个。我假设OP知道如何存储数据,但是的,最好将其存储在数据库中。好的,您不必在持久性系统中存储重定向地址,但当前位置确实如此-即使它与文件中的循环整数(
0,1,2,0,1…
)一样基本。@halfer一点也不喜欢:)添加了编辑,可以继续编辑。这太棒了!为我工作,非常感谢!好东西,尽管像
header()
这样的PHP关键字应该是小写的。PHP函数和方法不区分大小写。据我所知,目前还没有关于该案例的最佳实践。