基于国家/地区的IP地址重定向

时间:2013-11-21 22:12:00

标签: php regex apache .htaccess redirect

不确定是否可以这样做。
但我需要一种方法来根据国家/地区的IP地址重定向访问者。

在有人提到之前,
是的我知道Geoip,但我的主人没有它,我没有shell访问权限 所以我正在寻找另一种选择。

这是问题,
我的网站通常供个人使用,我受到垃圾邮件发送者和不受欢迎的抓取工具的轰炸加上 寻找文件的人我甚至没有。这些来自全球各地的访客 所以我需要一种方法来有效地做到这一点。

现在我只是使用正则表达式的混乱方式重定向其中一些。
像这样。

#china ips-
#
RewriteEngine on
RewriteCond %{REMOTE_ADDR} ^(49\.(4|51|52|64|239)|54\.222) [OR]
RewriteCond %{REMOTE_ADDR} ^(91\.234|134\.196|159\.226|161\.207|166\.111) [OR]
RewriteCond %{REMOTE_ADDR} ^(168\.160|192\.(124|188)|193\.0)
RewriteRule !^folder/country\.html http://www.website.com/folder/country.html [L,NC,R]

虽然这样可行,但它只会将列出的正则表达式IP地址重定向到我选择的页面 它可能有20多个IP地址,但是如果你有超过1000个以上的ip地址,你需要重定向,
(我这样做)你的htaccess文件往往变得非常大而且混乱。

我宁愿在文本文件中输入IP地址,并让htaccess在cn.txt中查找, 或china.txt然后以某种方式将它在该txt文件中找到的任何IP地址重定向到
http://www.website.com/folder/country.html
我知道如果我的主人有geoip它可能会让这很容易。

我忘了提及,我的网站大概是85%的HTML,而我确实有一个论坛库和常见问题解答是php,
我通常使用大多数HTML代码。 感谢

2 个答案:

答案 0 :(得分:0)

您需要将以下PHP脚本添加到访问者可以打开的所有PHP脚本中。许多PHP应用程序都有一个引导脚本,您可以在其中放置此代码。但是,如果不是你的情况,那么htaccess是一个更好的选择。

index.php脚本:

<?php
// Get user's IP address
$remoteAddr = $_SERVER['REMOTE_ADDR'];
// Load a list of regular expressions that redirect the user to 'http://www.website.com/folder/country.html'
$regexes = explode("\n", file_get_contents(dirname(__FILE__) . "/cn.txt"));

foreach ($regexes as $regex) {

    if (preg_match('/^' . $regex . '$/', $remoteAddr)) {             
         header("Location: http://www.website.com/folder/country.html");
         exit;
    }
}

cn.txt的内容:

49\.(4|51|52|64|239)|54\.222
91\.234|134\.196|159\.226|161\.207|166\.111
and so on

注意:您还可以通过脚本(使用您选择的语言)生成htaccess。我的意思是你可以有一个正则表达式列表,并在每次修改列表时从该列表生成你的htaccess。

答案 1 :(得分:0)

有一些重定向解决方案不需要服务器中的任何代码或任何数据库。其中之一是www.redirectbycountry.com