PHP Geo重定向-允许在初始重定向后访问主URL

时间:2018-08-24 03:05:36

标签: php wordpress redirect cookies geoip

所有人!

我已经在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/,则访问者将被重定向到他们国家的主页。

我正试图允许美国以外国家/地区的访问者获得以下体验:

  1. 首次访问时,重定向到其国家/地区的首页(如果访问其国家/地区的子域之外的页面)。
  2. 第一次访问后,访问者可以导航到其他国家/地区子域(通过链接或直接输入URL都没有限制)。
  3. 首次访问后,访问者还可以访问主域中的页面(无限制,无论是通过链接还是通过直接URL输入)。
  4. 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重定向来说,这是一场漫长而艰巨的战斗。我不确定这是否将是一个成功的方法,或者是否需要对它做一些不同的调整。

0 个答案:

没有答案