PHP如何做elseif最后的其他声明来涵盖所有其他的可能性

时间:2018-03-20 22:52:29

标签: php redirect server header geolocation

我有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不在后台运行?我以为退出();会做的但显然不是。

由于

1 个答案:

答案 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