Як заборонити доступ до сайту за критерієм приналежності до країни

  • PHP
  • htaccess
  • URL Rewriting

Вітаю тебе,% username%.

необхідно:
Розмежувати доступ. Заборонити доступ всім, скажімо, крім "РФ" і країн ближнього зарубіжжя (дуже багато запитів стало якраз "з-за бугра").

Передбачуване рішення:
Використовувати php для визначення країни клієнта (реалізовано) + "прозоро розрулити" доступ до файлів. Перенаправити всі запити до php:

check.php отримує в GET рядок запиту, плюс там же ми перевіряємо IP. Після обробки ми визначилися що робити із запитом (з'ясували країну звіривши IP з гео-базою) - пропустити його або заблокувати - але як тепер "повернути управління" назад?
Тобто якщо запит з IP "РФ", і запитаний корінь сайту - потрібно просто вивести індекс кореня сайту; якщо запит з IP "РФ", і запитаний файл - необхідно його віддати за прямим посиланням, по якій він і був раніше, не змінюючи url.
Якщо запит з IP не «РФ" і країн ближнього зарубіжжя, і запитаний корінь сайту - потрібно відправити заголовок 403 і вивести вивести відповідну помилку; якщо запитаний файл за прямим посиланням - потрібно повідомити ту-ж саму 403 помилку.

За ідеєю можна було б:
Якщо ip дозволений - робити header ( 'Location:'. @ $ _ GET [ 'url']. '? Redirect = no') ;. а в .htaccess додати RewriteCond%! (^ |) redirect = no ($ |) (а якщо заборонений - редирект з заголовком 403 коду на сторінку-заглушку), але це спричинить за собою редирект (якого треба уникнути), і неможливість виведення індексу директорій.

Чи є можливість зробити роботу php "прозорою"? Тобто apache щоб працював як працював, але в разі якщо ip клієнта в "чорному списку" - закрити доступ?

ps. Прошу вибачення за деяку недорікуватий

Прошу вибачення, я не впевнений, що знаю, як це зробити з використанням голого apache і .htaccess, але чому б вам не використовувати nginx, зібраним з одним з численних модулів GeoIP.
По-перше nginx краще справляється зі статикою, і ймовірно, навантаження впаде відразу після впровадження nginxa як фронту, і не буде такої гострої потреби різати користувачів по регіонах, а по-друге в nginx це реалізується досить просто:
Наприклад, використовуючи модуль geoip2, ви можете за допомогою стандартної конструкції if в Локейшн nginx'a порівнювати значення змінної $ region з потрібними вам для заборони / дозволу.

Прошу вибачення, якщо вважаєте за мою відповідь офтоп.

О, це було б шикарно! Але, на жаль, немає можливості використовувати модулі крім наданих хостером (а серед доступних нічого пов'язаного з геопозіціей і в помині немає, хоча, для очищення совісті лист в саппорт все таки написав)

Загалом, друзі, рішення. Спасибі всім, хто відгукнувся!

Можна семуліровать турботу php в "прозорому режимі". Можна, але це дуже ресурсномістких. В 2х словах алгоритм повинен виглядати наступним чином - все запити перенаправляються до index.php; Якщо запитуємо існуючу директорію - виводимо лістинг; якщо запитуємо файл - по шматках його читаємо і видаємо (попередньо виставивши необхідні заголовки). Але, тому що запитів багато, а файли - досить великі - рішення б поклало сервер хвилини за дві. Працювало б, було б гнучке, але поклало. Дуже паскудний рішення в даній ситуації, треба сказати.

Що було зроблено - так як хостинг від "руцентра" (nic.ru) - режим роботи був переведений в ручний, зібраний з вихідних модуль mod_geoip. і підсунуть Апач з не «рідний" директорії (рідні все рідонлі). Апач його з'їв, модуль був налаштований, все запрацювало. Рідний "мануал" на форумі "руцентра" вкрай не повний, зробив про весь процес замітку по посиланню. Саппорт руцентра так і не відповів на листи. Йшли третю добу.