PHP 如何做其他如果最终的 else 语句来涵盖所有其他可能性



我有一个 cloudflare 的地理重定向代码,如下所示

<?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)

我想添加一个最终的 else 语句,以便将美国站点上所有不是美国或加拿大的流量重定向到英国站点(世界其他地区也是如此)。

我该如何最好地做到这一点?

此外,这似乎需要很长时间才能运行(在一台好的服务器上),我如何简化它,使其只在需要的地方运行? 例如,其他其他如果在满足正确的条件后不在后台运行?我以为出口();会解决问题,但显然不会。

谢谢

因此,您需要添加一个新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的完整 URL 并检查 url 来进一步整理它(但我不知道您的所有数据/信息是如何工作的)。

此外,这似乎需要很长时间才能运行(在一台好的服务器上)如何 我可以简化它,让它只运行到需要的地方吗?例如 其他 elseif 在正确的 elseif 之后没有在后台运行 遇到?我以为出口();

这一小块条件不应该是一个瓶颈,它可能是重定向时间(重定向并连接到另一个URL甚至服务器?),或者其他什么。

PHP 会在无法满足条件时立即停止评估,一旦满足一个条件就不会评估其他条件,因为它们是"其他"。
https://stackoverflow.com/a/2535578/2632129

最新更新