【发布时间】: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