Cum să interzic accesul la site prin criteriile de apartenență la țară

  • PHP
  • htaccess
  • Rescrierea URL-ului

Salutări,% nume utilizator%.

Este necesar:
Pentru a diferenția accesul. Interzic accesul tuturor, să zicem, cu excepția "RF" și a țărilor din străinătate aproape (foarte multe cereri au fost doar "din cauza dealului").

Soluție sugerată:
Utilizați php pentru a determina țara clientului (implementată) + accesul "transparent divizat" la fișiere. Redirecționați toate solicitările în php:

check.php primește un șir de interogări în GET, plus verificăm IP-ul în același loc. După procesare, am decis ce să facem cu cererea (am aflat că țara a verificat IP-ul cu baza de date geo) - să o ignore sau să o blocheze - dar cum să revenim acum la "return control"?
Ie dacă cererea este din IP "RF", iar rădăcina site-ului este solicitată - trebuie doar să afișați indexul rădăcină al site-ului; dacă cererea este din IP "RF", iar fișierul este solicitat - este necesar să-l dați prin intermediul unei legături directe, pe care o fusese înainte, fără a schimba adresa URL.
Dacă cererea din IP nu este "RF" și țările din străinătate apropiate și rădăcina site-ului este solicitată - trimiteți antetul 403 și afișați o eroare corespunzătoare; dacă un fișier este solicitat printr-o legătură directă, trebuie să raportați aceeași eroare de 403.

La idee ar fi posibil:
Dacă este permisă ip, faceți antetul ('Location:'. @ $ _ GET ['url']. '? Redirect = nu'); și se adaugă .htaccess% RewriteCond (^ |) Redirecționarea = nu ($ |) (și, dacă este negat - cu un cod de redirecționare antet la pagina 403-capac), dar acest lucru ar atrage după sine o redirecționare (care ar trebui să fie evitate), precum și imposibilitatea de retragere! directorul index.

Este posibil ca php-ul să funcționeze "transparent"? Ie apache pentru a lucra ca a lucrat, dar în cazul în care ip-ul clientului în "lista neagră" - pentru a închide accesul?

ps. Îmi cer scuze pentru un limbaj inexact

Îmi pare rău, nu sunt sigur că știu cum să fac acest lucru folosind .htaccess și apache gol, dar de ce nu utilizați Nginx putea, colectate de la unul din multele modulului GeoIP.
În primul rând Nginx face față mai bine cu statică, și, probabil, sarcina va cădea imediat după introducerea nginxa ca partea din față, și va exista o nevoie stringenta de a reduce utilizatorii în funcție de regiune, iar în al doilea rând cu Nginx este pus în aplicare destul de simplu:
De exemplu, utilizând modulul geoip2, puteți utiliza structura standard dacă se află în încuietori nginx pentru a compara valoarea regiunii $ cu cele pe care trebuie să le dezactivați / activați.

Îmi cer scuze dacă credeți că răspunsul meu este offtopic.

Asta ar fi minunat! Dar, din păcate, nu există nici o modalitate de a utiliza module, în plus cu condiția ca câmin (printre nimic disponibile referitoare la geopozitsiey și nu există nici o urmă, dar, la fel a scris o scrisoare pentru a șterge conștiința mea într-un suport)

În general, prieteni, soluția. Mulțumesc tuturor celor care au răspuns!

Puteți simula grija de php în "mod transparent". Este posibil, dar este foarte resursă intensă. Cu 2 cuvinte, algoritmul ar trebui să arate astfel: toate solicitările sunt redirecționate către index.php; Dacă solicităm un director existent, vom imprima listarea; dacă cerem un fișier, l-am citit de bucăți și l-am emis (pre-setarea anteturilor necesare). Dar, din moment ce solicită foarte mult, iar fișierele - destul de mari - soluția ar pune serverul timp de aproximativ două minute. Ar funcționa, ar fi flexibil, dar ar fi pus. O decizie foarte urâtă în această situație, trebuie să spun.

Ce sa făcut - de la găzduirea de la "ruscentr" (nic.ru) - modul de operare a fost tradus într-un mod manual, modulul mod_geoip a fost compilat din surse. și a alunecat apache de la directorul "nativ" (nativ toate în mod ascuns). Apache a mâncat, modulul a fost configurat, totul a funcționat. Manualul nativ de pe forumul "ruscentra" este extrem de incomplet, făcând o notă despre întregul proces prin referință. Suportul rucenterului nu a răspuns niciodată scrisorilor. A treia zi a trecut.