Просмотр полной версии : Как блокировать посетителей из опр.Страны?
Всем здрасти.
Вопрос таков: как мне заблокировать через .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 и его страна...
П.С. в ПШП я не ахти ((
Pashkela
08.11.2008, 21:58
GeoIp
да дело то в том что модуль GeoIp никак не поставить..... хост капризничает (
Pashkela
08.11.2008, 22:01
Хостер не поддерживает PHP? Народ.сру?
у меня McHost.ru .... вот тока они говорят что мол виртуальный хостинг не поддерживает модуль GeoIp и так далее бла бла бла (((
какже быть?
кстати в .htaccess так писать мона:
Order Allow, Deny
Deny from 2.6.190.1-2.6.190.56
мол разрешить всем кроме данного диопозона Ip
Pashkela
08.11.2008, 22:21
<?php
$t= array();
$strana = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$t = explode(',',$strana);
if($t[0]!='ru')
{
echo "Доступ запрещен!";
}
else
{
echo "Добро пожаловать:)";
}
?>
разжуй пожалуйста принцип его работы
Pashkela
08.11.2008, 22:29
выцепляет приоритетный язык юзера, чтобы понять, как это работает, запусти такой код:
<?php
$t= array();
$strana = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$t = explode(',',$strana);
print_r ($t);
?>
Способ не ахти какой, но китайцев и прочих отсеет на раз:)
Pashkela, ему надо по IP, а не по языку. Эти понятия никак не связаны.
Решение правильное дали: GeoIP.
Pashkela
08.11.2008, 22:55
Ну так, как вариант. А так, конечно, и думать нечего - нафик такого хостера
Pashkela
08.11.2008, 23:13
2 ZemoN:
не парься, все проще, чем ты думаешь:
http://php.mirror.camelnetwork.com/manual/ru/ref.geoip.php
Pashkela
09.11.2008, 00:29
В общем вот решение:
1. Скачай это: http://stream.ifolder.ru/8975851
там три файла:
1) GeoIP.dat
2) geoip.inc
3) GeoIPCountryWhois.rar - здесь расшифровка стран по первым двум символам
распакуй и скопируй всё в одну папку, туда же положи скрипт следующий:
<?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" или этого не нужна делать?
вообщем вопросов просто КУЧА ))
Pashkela
09.11.2008, 04:09
http://freshcoder.ru/archives/19
ну с пшп понятно.... а как его привязать? кстати нашел вот статеку
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
Pashkela
09.11.2008, 15:43
Скачать то, что выложено выше и вставить в свой index.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://место_для_нерусских");
}
?>
Скачать то, что выложено выше и вставить в свой index.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 ?
Pashkela
09.11.2008, 16:18
Идеальный вариант пихать код в так называемую шапку сайта (или в футер) - т.е. те места, которые отображаются на любой странице сайта.
html - если на народ.ру - то нельзя:) Вернее можно, но смысла не будет
Только на хосте с поддержкой PHP
Обновлять в твоем случае ничего не надо - страны - это не пирожки, чтобы каждый год вылупляться
для одного IP можно, но будет работать, если этот один IP статичный:
<?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://место_для_нерусских");
}
?>
ЗЫЖ Прежде чем задавать вопросы "можно/нельзя" - возьми и попробуй. Без попыток что-то сделать самому не поймешь фишку никогда
да кстати что выше будит имееть приоритет: htaccess или ПШП в ШТМЛ ?
Pashkela
09.11.2008, 16:35
.htaccess, всегда
Идеальный вариант пихать код в так называемую шапку сайта (или в футер) Фу так делать
http://ru.wikipedia.org/wiki/MVC
Идеальный вариант пихать код в так называемую шапку сайта (или в футер) - т.е. те места, которые отображаются на любой странице сайта.
html - если на народ.ру - то нельзя:) Вернее можно, но смысла не будет
Только на хосте с поддержкой PHP
Обновлять в твоем случае ничего не надо - страны - это не пирожки, чтобы каждый год вылупляться
для одного IP можно, но будет работать, если этот один IP статичный:
<?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://место_для_нерусских");
}
?>
ЗЫЖ Прежде чем задавать вопросы "можно/нельзя" - возьми и попробуй. Без попыток что-то сделать самому не поймешь фишку никогда
ты просто ЧЕЛОВЕЧИЩЕ.... огромное СПС
____________
Да как кстати лучше обезопасить GeoIP.dat, ну шоб с сайта не стырили )
Pashkela
12.11.2008, 23:17
сделай такой .htaccess:
Options -Indexes
<Files "GeoIP.dat">
order allow,deny
deny from all
</Files>
кстати пробую щас с таким решением..... что то он не работает (сервак PHP поддерживает) ((
код уже вставлял где не поподя..... просто реакции ни какой .....
что делать??
Pashkela не подскажишь почему вышенаписанный тобой ПШП не работает?
Pashkela
13.11.2008, 02:52
вариантов несколько:
1. твой хост не поддерживает php
2. поддерживает, но php не установлен
3. Неправильно скопировал
4. Не туда вставил
5. Что-то накосячил, когда вставлял
6. Код работает, но, например, не работает твой остальной код
7. http://место_для_русских" - тут должна быть твоя ссылка, а не та хрень, что тут написана
8. etc.......
В общем дофига и больше вариантов. Код рабочий, сам проверял на себе. Если бы код был неправильный, думаю старшие меня бы давно зачмырили - тут же ачад, а не шишки-баб
вариантов несколько:
1. твой хост не поддерживает php
2. поддерживает, но php не установлен
3. Неправильно скопировал
4. Не туда вставил
5. Что-то накосячил, когда вставлял
6. Код работает, но, например, не работает твой остальной код
7. http://место_для_русских" - тут должна быть твоя ссылка, а не та хрень, что тут написана
8. etc.......
В общем дофига и больше вариантов. Код рабочий, сам проверял на себе. Если бы код был неправильный, думаю старшие меня бы давно зачмырили - тут же ачад, а не шишки-баб
1. хост поддерживает php
2. php установлен
3. скопировал и вставил туда, наверно... ) в HTML страницу между тегов head
4. Пять раз перепроверил... все ок
5. какой остальной код может не работать? О_о
6. http://место_для_русских" ну до этого то я допер =)))
Вообщем ХЗ почему он не пашет (((
Pashkela
13.11.2008, 03:05
3. скопировал и вставил туда, наверно... ) в HTML страницу между тегов head
переименуй из .html в .php
Вообще должна быть что-то типо index.php
В обычный .html php-код вставлять нет смысла просто - не будет работать
А вот в .php можно вставлять html-код - будет работать и то и другое
Но тут уже структура твоего сайта может не позволить так сделать. Чтобы проверить, работает код или нет (а также наличие php на сайте) - создай файл test.php и вставть туда код, что выше, а потом просто перейди по адресу http://твой_сайт/test.php
не надо сразу пытаться предложенные скрипты сувать в рабочий код, всегда тести в отдельных файлах
Pashkela твоя доброта не знает границ.
переименуй из .html в .php
Вообще должна быть что-то типо index.php
В обычный .html php-код вставлять нет смысла просто - не будет работать
А вот в .php можно вставлять html-код - будет работать и то и другое
Но тут уже структура твоего сайта может не позволить так сделать. Чтобы проверить, работает код или нет (а также наличие php на сайте) - создай файл test.php и вставть туда код, что выше, а потом просто перейди по адресу http://твой_сайт/test.php
не надо сразу пытаться предложенные скрипты сувать в рабочий код, всегда тести в отдельных файлах
т.е. как я понял, можно взять просто тупа поменять расширение страничик с HTML на PHP после чего просто отредактировать "a href=" и все будит работать, включая вышенаписанный табой код?
а как это скажится на индиксации сайта?
и еще вопрос:
Подскажите , а лучше покажите готовый пример передачи через mod_rewrite запрос php скрипту, который и выполняет проверку при посещении любой страницы статичного сайта.
просто хочу делать проверку по geoip.
login999
14.11.2008, 10:10
ТС, ставь TDS и не парь мозг ни себе, ни Пашкеле :) - будет тебе и проверка по ГеоИП,и так далее :)
ТС, ставь TDS и не парь мозг ни себе, ни Пашкеле :) - будет тебе и проверка по ГеоИП,и так далее :)
ээээ... а что такое TDS ? :confused:
П.С. я токак начинаю во всем этом разбираться :rolleyes:
создал вот что:
.htaccess-RewriteEngine on
RewriteRule ^.*\.html /script.php
redirect /_vti_bin http://www.microsoft.com
redirect /scripts http://www.microsoft.com
redirect /MSADC http://www.microsoft.com
redirect /c http://www.microsoft.com
redirect /d http://www.microsoft.com
redirect /_mem_bin http://www.microsoft.com
redirect /msadc http://www.microsoft.com
RedirectMatch (.*)\cmd.exe$ http://www.microsoft.com$1
DirectoryIndex index.html
Options -Indexes
script.php-<?php
$file = explode("?", getenv('REQUEST_URI'));
array_pop($file);
$file = $DOCUMENT_ROOT.$file[0];
require_once("geoip.inc");
$gi = geoip_open("GeoIP.dat",GEOIP_STANDARD);
$ip = $_SERVER['REMOTE_ADDR'];
if ($ip == '94.188.51.41')
{
readfile($file);
exit;
}
$code = geoip_country_code_by_addr($gi, $ip);
if ($code=='RU')
{
header("Location: http://yandex.ru");
}
else
{
readfile($file);
}
?> но:
1. Index сначала грузится без фильтра
2. При переходе уже на самом сайте переадрисовывает нежелательного пользователя нормально правда для желательного пользователя грузит пустую страницу(белый экран) а путь вверху показывает правильно
проблема вроде от сюда $file = $DOCUMENT_ROOT.$file[0];в чем тут дело?
vikseriq
16.11.2008, 19:42
хз. тут не так трудно надо:
1 все гоним на обработчик с параметром, он же запрос
2 берем там ип.
3.1 если ип не нужный - гоним через Location : site.ru
3.2 иначе гоним на наш сайт, добавив в строку параметр.
login999
17.11.2008, 09:36
Simple TDS - бесплатная система распределения траффика
http://simpletds.com/
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot