【问题标题】:Redirect user to subdomain for specific country将用户重定向到特定国家/地区的子域
【发布时间】:2011-09-03 11:30:40
【问题描述】:

我有一个网站 www.xyz.com,其中包含特定国家 X 的内容。此外,我在同一域的子域(如 subdomain.xyz.com)上还有另一个指向不同国家 Y 的站点

我可以使用任何免费的地理 ip 数据库和一些 php 脚本来实现重定向,我成功地做到了,但现在问题是

来自 Y 国的人访问网站 www.xyz.com 被重定向到 subdomain.xyz.com,但假设他想检查 www.xyz.com 它再次将他们重定向到 subdoamin.xyz.com。

我希望这是 google 的方式,因此如果假设从阿联酋访问 google.com 的人被重定向到 google.ae,但如果他们点击转到 Go to Google.com,他们会毫无问题地被重定向到 google.com .

我需要为我的网站实现这个..

该网站在 wordpress 中。请建议我最好的解决方案。

好的,这是我用过的代码..

/**
 * Example 6
 *
 * This is what google probably do with users around the world
 *
 * Multiple declatations
 */

// Start by including CountryDetector class
include("./src/CountryDetector.class.php");

// You dont need to create instance of this class you can access only on static context

// Google.co.uk
CountryDetector::redirect("AE", "http://uae.jobscow.com");

// Google Germania
CountryDetector::redirect(array("DE", "AT"), "http://google.de"); // Ausrian and German users

// Google China
CountryDetector::redirect("CN", "http://google.cn");

// Google sweden
CountryDetector::redirect("SE", "http://google.se");

// Google norwegia
CountryDetector::redirect("NO", "http://google.se");

// Google serbia
CountryDetector::redirect("RS", "http://google.rs");

// AND SO ON...

// Finally: Google.com - international
CountryDetector::redirect("international", "http://google.com");

?>

你会建议我对此做出哪些改变

【问题讨论】:

    标签: php wordpress redirect


    【解决方案1】:

    使用引荐来源网址检查:如果他们到达 www.xyz.com 并且引荐来源网址不是国家/地区站点,则重定向到国家/地区站点。

    如果他们在国家网站上点击“去 www.xyz.com”,那么referer 将是 country.xyz.com,然后你就不会重定向了。

    您也可以使用 cookie 来存储客户对此事的偏好。

    RFC2616 section 14.36解释了Referer头域,this article展示了如何在php中使用。

    编辑:作为替代方案 - 因为 lars 指出用户或路径上的某些东西可能会停用它/删除标题 - 您可以在 www.xyz 上使用虚拟“登录页面”来提示访问者来自的服务器国家服务器:

    <a href="www.xyz.com/fromcountryserver.php">Go to xyz</a>
    

    或者为什么不,添加一个请求变量,表明浏览器来自国家服务器。愚蠢的例子只是为了表明意图

    <a href="www.xyz.com/index.php?comingfrom=countryserver">Go to xyz</a>
    

    或这些技术的混合。更多工作,但除非某些疯子在客户端重写 URL,否则它应该始终有效。

    【讨论】:

    • 嗯。我知道 cookie 并不比referrer 更可靠,但无论如何referrer 都不是办法
    • referer 有问题,一些防火墙甚至用户将其停用。
    【解决方案2】:

    我相信这只是 Google 用于这个愚蠢伎俩的 cookie。

    让我建议您在一些 HTTP 嗅探器打开时导航到 google。这是极具教育意义的事业。

    【讨论】:

    • @Jimin 好吧,我想说 3xx 重定向同样重要。所以,最好看看复杂的图片,具体的 HTTP 是如何工作的
    【解决方案3】:
    1. 安装 GeoIP PHP 扩展http://www.videochat-scripts.com/install-geoip-php-extension/
    2. 检测用户的国家http://php.net/manual/en/book.geoip.php
    3. 如果用户登陆了错误的网站,则重定向用户

    【讨论】:

      【解决方案4】:

      在您的网络服务器上使用重定向(即,如果您使用 Apache)或通过 javascript(重定向功能)将它们插入页面。

      如果您使用的是 Apache,如果您使用 MaxMind 获取访问国家/地区,则可以使用 mod_alias 配置重定向(您可以使用其他服务,我想这没有问题),即:

      GeoIPEnable On
      GeoIPDBFile /path/to/GeoIP.dat
      
      # Redirect one country
      RewriteEngine on
      RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^CA$
      RewriteRule ^(.*)$ http://www.canada.com$1 [L]
      
      # Redirect multiple countries to a single page
      RewriteEngine on
      RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^(CA|US|MX)$
      RewriteRule ^(.*)$ http://www.northamerica.com$1 [L]
      

      更多信息:http://httpd.apache.org/docs/current/mod/mod_alias.html

      你也可以通过 PHP 获取客户端的地址,然后像这样构造一个 javascript 函数(不过 Apache 的方案更优雅):

      function redir()
      {
      if(checkCountryViaIp(ip) == countryx)
      {
          window.location = "countryxpage.php"
      }
          //etc...
      }
      

      【讨论】:

      • 你能说得更具体点吗,或者如果可能的话,请分享代码
      • 如何从美国进入加拿大网站?
      • 您可以将其作为配置放在主站点上,但不能放在子站点上。这一切都取决于您希望如何处理不同站点的访问。
      • @mcomghall 你所解释的会根据原始 IP 进行自动重定向,而这正是他想要避免/陷阱/抵消的。
      • 假设您将 xyz.com 作为您的主要站点,并且您将重定向到 .xyz.com。您可以将我提供的配置作为配置放在 xyz.com 上,让任何人随时访问 .xyz.com,只需在您的 Apache 配置上创建不同的虚拟站点(或将它们放在不同的服务器上)。
      猜你喜欢
      • 2013-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多