Всем здрасти. Вопрос таков: как мне заблокировать через .htaccess посетителей из определенной страны? у меня в наличии уже есть база от maxmind в формате "*.csv", сведения в ней даются в следующей форме: beginIp,"endIp","beginIpNum","endIpNum","countryCode","countryName" 2.6.190.56,"2.6.190.63","33996344","33996351","GB","United Kingdom" 3.0.0.0,"4.17.135.31","50331648","68257567","US","United States" 4.17.135.32,"4.17.135.63","68257568","68257599","CA","Canada" 4.17.135.64,"4.17.142.255","68257600","68259583","US","United States" 4.17.143.0,"4.17.143.15","68259584","68259599","CA","Canada" ну и т.д. (всего около 95000 строк) Соответственно тут указывается диапозон Ip и его страна... П.С. в ПШП я не ахти ((
у меня McHost.ru .... вот тока они говорят что мол виртуальный хостинг не поддерживает модуль GeoIp и так далее бла бла бла ((( какже быть? кстати в .htaccess так писать мона: Order Allow, Deny Deny from 2.6.190.1-2.6.190.56 мол разрешить всем кроме данного диопозона Ip
PHP: <?php $t= array(); $strana = $_SERVER['HTTP_ACCEPT_LANGUAGE']; $t = explode(',',$strana); if($t[0]!='ru') { echo "Доступ запрещен!"; } else { echo "Добро пожаловать:)"; } ?>
выцепляет приоритетный язык юзера, чтобы понять, как это работает, запусти такой код: PHP: <?php $t= array(); $strana = $_SERVER['HTTP_ACCEPT_LANGUAGE']; $t = explode(',',$strana); print_r ($t); ?> Способ не ахти какой, но китайцев и прочих отсеет на раз
Pashkela, ему надо по IP, а не по языку. Эти понятия никак не связаны. Решение правильное дали: GeoIP.
2 ZemoN: не парься, все проще, чем ты думаешь: http://php.mirror.camelnetwork.com/manual/ru/ref.geoip.php
В общем вот решение: 1. Скачай это: http://stream.ifolder.ru/8975851 там три файла: 1) GeoIP.dat 2) geoip.inc 3) GeoIPCountryWhois.rar - здесь расшифровка стран по первым двум символам распакуй и скопируй всё в одну папку, туда же положи скрипт следующий: PHP: <?php require_once("geoip.inc"); $gi = geoip_open("GeoIP.dat",GEOIP_STANDARD); $ip = $_SERVER['REMOTE_ADDR']; $code = geoip_country_code_by_addr($gi, $ip); echo $code; ?> и наслаждайся А хостер твой наверное подумал, что ты его просишь установить это (кстати еще один вариант): http://www.maxmind.com/app/mod_geoip
..... сори за тупой вопрос, а куда воще пшп ставить? делать отдельный файл? или как? _____ да еще как переделать купленный уже "GeoIP-108.csv" в "GeoIP.dat" или этого не нужна делать? вообщем вопросов просто КУЧА ))
ну с пшп понятно.... а как его привязать? кстати нашел вот статеку http://aleksey.nemiro.ru/my/articles/asp/Extracting-the-Country-from-the-IP-Address-How-To.html?page=1#add ток немогу пока разобраться с запретом для целой страны
Ладно... перефразирую вопрос : Как технически (желательно готовый пример) осуществить блокировку России на сайт? В наличии ИМЕЕТСЯ: -база Ip по странам от MaxMind в формате "*.csv" и "*.dat" В наличии НЕ ИМЕЕТСЯ: -возможность поставить модуль GeoIp на хост -знание ПШП и ASP/VBScript
Скачать то, что выложено выше и вставить в свой index.php следующий код: PHP: <?php require_once("geoip.inc"); $gi = geoip_open("GeoIP.dat",GEOIP_STANDARD); $ip = $_SERVER['REMOTE_ADDR']; $code = geoip_country_code_by_addr($gi, $ip); if ($code=='RU') { header("Location: http://место_для_русских"); } else { exit; // или замени exit на header("Location: http://место_для_нерусских"); } ?>
ВОО ... уже ближе к телу.... возникает следующий вопрос: - в штмл можно его пихнуть? - а не нужно ли его (код) пихать во все страницы? малоли из поисковика проиндексируется какаянить друга страница - файл geoip.inc какое функционалное предназночение имеет? надо ли его както обновлять? - и можно ли в пшп добавить разрешение для 1 русского Ip ?
Идеальный вариант пихать код в так называемую шапку сайта (или в футер) - т.е. те места, которые отображаются на любой странице сайта. html - если на народ.ру - то нельзя Вернее можно, но смысла не будет Только на хосте с поддержкой PHP Обновлять в твоем случае ничего не надо - страны - это не пирожки, чтобы каждый год вылупляться для одного IP можно, но будет работать, если этот один IP статичный: PHP: <?php require_once("geoip.inc"); $gi = geoip_open("GeoIP.dat",GEOIP_STANDARD); $ip = $_SERVER['REMOTE_ADDR']; if ($ip == '1.1.1.1') {exit;} // IP - исключение из правил $code = geoip_country_code_by_addr($gi, $ip); if ($code=='RU') { header("Location: http://место_для_русских"); } else { exit; // или замени exit на header("Location: http://место_для_нерусских"); } ?> ЗЫЖ Прежде чем задавать вопросы "можно/нельзя" - возьми и попробуй. Без попыток что-то сделать самому не поймешь фишку никогда