【问题标题】:Redirect visitor based on country根据国家/地区重定向访问者
【发布时间】:2018-07-06 03:06:28
【问题描述】:

我正在尝试根据用户所在的国家/地区将用户重定向到子文件夹,并限制访问其他国家/地区的网站版本。我正在使用 Apache 的 GeoIP 模块、访问者的 IP 地址和 maxmind 数据库来确定访问者的国家/地区。

我在 example.com 的根目录中有一个 .htaccess 文件,其中包含:

# US
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^US$
RewriteRule ^(.*)$ https://example.com/us$1 [L]

# UK
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^UK$
RewriteRule ^(.*)$ https://example.com/uk$1 [L]

这很好用。来自美国的访问者被重定向到 us 子文件夹,英国访问者被相应地重定向。但是,美国访问者可以直接访问example.com/uk 并查看其他国家/地区的版本,我想阻止这种情况但我的尝试失败了。

我将上面的重写规则复制到子文件夹中的.htaccess 文件中,当我访问 example.com 时,这导致了重定向循环。

作为一个临时解决方案,我正在使用以下方法,它只允许从获准访问子文件夹的国家/地区进行访问,并向外国访问者发送 HTTP 403,这有效,但不符合我的要求。

GeoIPEnable On
SetEnvIf GEOIP_COUNTRY_CODE US AllowCountry
SetEnvIf GEOIP_COUNTRY_CODE CA AllowCountry

Deny from all
Allow from env=AllowCountry

感谢任何帮助。

【问题讨论】:

    标签: apache .htaccess redirect mod-rewrite


    【解决方案1】:

    我想通了。解决方案是在将访问重定向到该国家/地区的子文件夹后不重定向来自该国家/地区的访问。我会解释的。

    以下规则将用户重定向到 example.com/us

    # US
    RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^US$
    RewriteRule ^(.*)$ https://example.com/us$1 [L]
    

    一旦发生此重定向,您不应在 us 子文件夹中的 .htaccess 文件中重复使用此规则,否则将导致重定向循环。您可以包含其他国家/地区的规则以强制他们返回其国家/地区的子文件夹,但不要在其子文件夹中包含该国家/地区的重定向规则(本例中为美国)。

    /var/www/example.com/.htaccess

    # US
    RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^US$
    RewriteRule ^(.*)$ https://example.com/us$1 [L]
    
    # UK
    RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^UK$
    RewriteRule ^(.*)$ https://example.com/uk$1 [L]
    

    /var/www/example.com/us/.htaccess

    # UK
    RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^UK$
    RewriteRule ^(.*)$ https://example.com/uk$1 [L]
    

    我希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-16
      • 1970-01-01
      • 2019-04-15
      • 2019-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多