Przy pomocy pliku .htaccess, można zablokować dostęp do naszych stron i aplikacji WWW poprzez weryfikację GeoIP adresu IP próbującego nawiązać połączenie. Z tego artykułu dowiesz się, jak to zrobić.
Na samej górze pliku .htaccess dotyczącego treści, którą chcemy ograniczyć pod względem geolokalizacji, musimy dodać odpowiednią regułę.
Poniżej znajduje się prosty przykład blokujący dostęp wszystkim krajom z wyjątkiem Polski i Niemiec do całej treści jaką obejmuje:
<IfModule mod_geoip.c>
GeoIPEnable on
RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} !^(PL|DE)$
RewriteRule ^(.*)$ - [F,L,QSA]
</IfModule>
Zwróć uwagę na poniższy fragment kodu (w powyższym przykładzie znajdziesz go w 4. wierszu):
!^(PL|DE)$
- „!” powoduje, że blokada działa dla wszystkich GeoIP poza wskazanymi w nawiasach – jego brak spowoduje, że TYLKO kraje w nawiasach zostaną zablokowane
- Kolejne kraje można dodawać oddzielając je znakiem „|„
Zwróć uwagę na poniższy fragment kodu (w przykładzie na górze artykułu znajdziesz go w 5. wierszu):
^(.*)$ - [F,L,QSA]
- (.)* – ten zapis oznacza dowolną ścieżkę – działa na wszystko
- F – definiuje, że błąd blokady wyświetli 403
- L – wstrzymuje wykonywanie kolejnych reguł w .htaccess
- QSA – zachowuje ciąg zapytań
Poza powyższym przykładem, można użyć tej reguły bardziej wybiórczo lub zdefiniować, co zostanie wyświetlone dla zablokowanych GeoIP.
Przykładowa reguła:
<IfModule mod_geoip.c>
GeoIPEnable on
RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} !^(PL|DE)$
RewriteCond %{REQUEST_URI} !/wyjatek\.html$
RewriteRule ^(.*)$ - [F,L,QSA]
</IfModule>
Wyłączenie pliku HTML spod działania reguły
Dodanie wiersza:
RewriteCond %{REQUEST_URI} !/wyjatek\.html$
spowoduje, że reguła nie zadziała dla pliku wyjatek.html.
<IfModule mod_geoip.c>
GeoIPEnable on
RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} !^(PL|DE)$
RewriteCond %{REQUEST_URI} !/wyjatek\.html$
RewriteRule ^(.*)$ /wyjatek.html [F,L,QSA]
</IfModule>
Wyświetlenie treści pliku HTML
Zapis:
RewriteRule ^(.*)$ /wyjatek.html [F,L,QSA]
spowoduje, że w przypadku połączenia z zablokowanego GeoIP, zostanie wyświetlona treść pliku wyjatek.html (bez zmiany adresu w przeglądarce)
Z kolei zmiana w powyższym zapisie F na R=302 spowoduje, że zostanie wyświetlona treść wyjatek.html wraz ze zmianą adresu w przeglądarce:
RewriteRule ^(.*)$ /wyjatek.html [R=302,L,QSA]
Przekierowanie na inny adres
W przypadku takiego zapisu, próba wejścia na stronę przekieruje nas na https://home.pl:
RewriteRule ^(.*)$ https://home.pl [R=301,L]
Zablokowanie dostępu tylko do wskazanego pliku
Poniższy zapis spowoduje, że zostanie zablokowany tylko dostęp do pliku index.html:
RewriteRule ^(index)\.html$ - [F,L,QSA]
Z kolei poniższy zapis sprawi, że zostanie zablokowany dostęp do plików index.html, test.html, przyklad.html:
RewriteRule ^(index|test|przyklad)\.html$ - [F,L,QSA]