我有cloudflare的georedirect代码,如下所示
<?php
$URI = $_SERVER['REQUEST_URI'];
$activepage = $_SERVER['SERVER_NAME'];
$country_code = $_SERVER["HTTP_CF_IPCOUNTRY"];
if ($activepage=="www.example.co.uk" & $country_code=="CA") {
$link = 'http://www.example.us' . $URI;
header("location:$link");
exit;
}
elseif ($activepage=="www.example.co.uk" & $country_code=="US") {
$link = 'http://www.example.us' . $URI;
header("location:$link");
exit;
}
elseif ($activepage=="www.example.us" & $country_code=="GB") {
$link = 'http://www.example.co.uk' . $URI;
header("location:$link");
exit;
}
elseif ($activepage=="www.example.us" & $country_code=="UK") {
$link = 'http://www.example.co.uk' . $URI;
header("location:$link");
exit;
}
?>
有效地将英国/ GB用户从美国站点重定向回英国站点,以及US&amp;英国站点上的加拿大用户到USD $站点(.us)
我想添加一个最终的else语句,以便美国站点上不是US或CA的所有流量都被重定向到英国站点(因此对于世界其他地方而言)。
我最好怎么做?
这似乎需要花费很长时间才能运行(在一台好的服务器上)如何简化这一点,以便它只运行到需要的程度?例如。在满足正确的后,其他elseif不在后台运行?我以为退出();会做的但显然不是。
由于
答案 0 :(得分:2)
因此,您需要添加一个新的elseif
,用于标识“网站是美国,流量不是美国,流量不是CA”的时间,并重定向到英国网站。
这是一个如何做到这一点的想法 - 我已经整理了一些代码,结合了具有相同结果的条件,并整理了逻辑(不改变它)。它没有经过测试,但可以按照您的要求使用它:
$URI = $_SERVER['REQUEST_URI'];
$activePage = $_SERVER['SERVER_NAME'];
$countryCode = $_SERVER["HTTP_CF_IPCOUNTRY"];
$redirectTld = '';
if (
$activePage == 'www.example.co.uk'
&& ($countryCode == 'CA' || $countryCode == 'US')
) {
$redirectTld = 'us';
} elseif (
$activePage == 'www.example.us'
&& ($countryCode == 'GB' || $countryCode == 'UK')
) {
$redirectTld = 'co.uk';
} elseif (
$activePage == 'www.example.us'
&& $countryCode != 'US'
&& $countryCode != 'CA'
) {
$redirectTld = 'co.uk';
}
if ($redirectTld) {
header('location: http://www.example.' . $redirectTld . $URI);
exit;
}
请注意,这不会是一个全部因素,因为仍然需要满足条件,如果你想要一个真正的捕获你只需要一个没有条件的} else {
(但那没有'似乎是你的问题要求:))
您可以通过获取页面的TLD而不是$activePage
的完整网址并仅检查网址(但我不知道您的所有数据/信息如何工作)来进一步整理它。
这似乎需要很长时间才能运行(在一台好的服务器上)如何 我可以简化这个,所以它只运行到它需要的程度吗?例如。该 其他elseif在正确的后面没有在后台运行 见过面吗?我以为exit();
这一小块条件不应该是一个瓶颈,它可能是重定向时间(重定向和连接到另一个URL甚至服务器?),或其他东西。
PHP会在一个条件无法满足时立即停止评估,一旦满足条件,就不会评估其他条件,因为它们是“其他”。
https://stackoverflow.com/a/2535578/2632129