所有人!
我已经在WP安装程序上继承/设置了一个插件,该插件可根据访问者所在的国家/地区将访问者重定向到首次访问的正确首页。
已建立重定向以设置location
cookie,以定义访问者所在的国家/地区,以及dontLoop
cookie,以忽略后续访问时的重定向。如果访问者是首次访问者,应该如何工作,他们将被重定向到正确的子域;如果访问者在dontLoop
Cookie的生存期内访问,则他们将不重定向,并且应该有权访问整个网站及其子域。
出现的问题是,仅当他们尝试访问位于主URL内的页面时,它才会重定向;如果他们正在访问其中一个子域目录,则无论这是否是他们的首次访问,都不会发生重定向。
因此,如果访客来自加拿大并试图访问https://example.com
,则会 将他们自动重定向到https://example.com/ca/
。
类似地,如果他们尝试访问主域上的页面,例如https://example.com/item/page/
,则会 自动重定向到其国家/地区的正确首页https://example.com/ca/
。>
如何,如果同一位访问者尝试访问其他子域之一,例如https://example.com/nz/
或https://example.com/nz/item/page/
,则访问者将不被重定向到他们国家的主页。
我正试图允许美国以外国家/地区的访问者获得以下体验:
dontLoop
cookie的24小时寿命到期后,访问者将返回项目符号1。我们认为我们已经接近了–我们已经成功修复了最初处理的重定向循环。我们只是不确定为什么访问者可以在其他子域中自由导航,却无法在主域中导航。
这里是插件(为了节省空间,我剪掉了其余的县)。前面有一项:我们正在使用WP Engine,因此开始时使用WPEngine\GeoIp
的东西是允许插件与主机收集的GeoIP信息对话的工具。由于最初的重定向确实可行,因此我们知道它已经成功获取了国家并触发了重定向。
function country_geo_redirect() {
if ( !current_user_can('administrator') ) {
$geo = WPEngine\GeoIp::instance();
if(array_key_exists('override', $_COOKIE)) {
// Do Nothing
} else {
$country = getenv('HTTP_GEOIP_COUNTRY_CODE');
$country = strtolower($country);
$dontLoop = 0;
setcookie('location',$country,time() + 24 * 3600); // 24 hours
if($country == 'ca') {
if(array_key_exists('dontLoop', $_COOKIE)){
//prevent redirect
} else {
setcookie('dontLoop','stop',time() + 24 * 3600, '/'); // 24 hours?>
<script language="javascript">
window.location.href = "https://example.com/ca"
</script>
<?php }
} else {
}
}
}
}
任何参考文献均不胜感激。如果还有其他帖子/问题可以解决此问题,请直接将我引向他们。对于GeoIP重定向来说,这是一场漫长而艰巨的战斗。我不确定这是否将是一个成功的方法,或者是否需要对它做一些不同的调整。