Leoman’s blog

bi blög

Archive for the ‘apache’ tag

Apache üzerinde Geo-IP filtering

leave a comment

Bir web projesinde gelen ziyaretçinin geo-location kaynağına göre farklı durumlar yaratmak isteniyor ise bunun için kullanabileceğimiz çözümün adı MaxMind-GeoIP [1].

Ne?

MaxMind bu konuda birden farklı veritabanı sunuyor. Eğer kaynak ülkeye göre işlem yapmak isterseniz GeoIP [2], şehire göre işlem yapmak istiyorsanız GeoCity [3] veritabanını kullanabilirsiniz. Ücretli satılan bu veritabanları yerine ücretiz kullanıma sahip olan GeoLite [4] [5] serilerini de kullanmak mümkün. Yalnız bu serileri belirli aralıklarda elle güncellemeniz gerekeceğini unutmamalısınız.

Nasıl?

Bu işlemlerin tamamı için PHP, Python, C, C# gibi MaxMind’ın sağlamış olduğu kütüphaneleri ya da Apache modülü gibi API’leri kullanabilmektesiniz.

Apache için geo-ip modülünü aktif etmek 3 adımlık bir süreçten ibaret;


apt-get install libapache2-mod-geoip
nano /etc/apache2/mods-available/geoip.conf

ile yüklediğimiz geoip modülünü açarak aşağıdaki satırlarla aktif olmasını ve bu işlemleri yaparken kullanacağı veritabanının yolunu belirteceğiz;


GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat

Bu işlemin ardından güncel GeoIP veritabanını belirttiğimiz path’e indirerek mod’u kullanılabilir hale getirmemiz yeterli olacaktır.


cd /tmp
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
gunzip GeoIP.dat.gz
mkdir -p /usr/share/GeoIP
mv GeoIP.dat /usr/local/GeoIP/
a2enmod geoip
apache2ctl restart

Artık GeoIP  modülümüz kullanıma hazır dilerseniz .htaccess içerisinde ya da direkt olarak apache config’i içerisinde işleme sokabiliriz. Örneğin;


RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^(CA|US)$
RewriteRule ^(.*)$ http://us.domain.com$1 [L]
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^(TR|DE|SE)$
RewriteRule ^(.*)$ http://eu.domain.com$1 [L]

Gibi big kod ile Kanada ve USA’den gelen kullanıcılaru us subdomain’ine, Türkiye, Almanya ve İsviçreden gelen kullanıcıları eu domain’ine yönlendirmiş oluruz.

Başka bir örnek olarak BTK tarafından anlmasızca siteleri bloklanan Google kısasa kısas yaparak Türkiye’den gelen kullanıcıları bloklamak isteseydi eğer, Apache içerisine şöyle bir ekleme yapması


SetEnvIf GEOIP_COUNTRY_CODE TR MalUlkeler
Deny from env=MalUlkeler
Allow from all

Bunun türevlerini GeoCity gibi veritabanlarını kullanarak genişletmeniz de mümkündür.

Neden?

Peki neden bunu yazılım içerisinden değil de Apache üzerinden yapıyoruz? Tamamen kişisel bir tercih ve performans kaygısıdır. PHP interpreter’ına girirek bu işlemleri yapmaktansa daha web sunucuya bağlantı kurulduğu anda bu işlemi gerçekleştirmek bir çok yönüyle daha hızlı olacaktır.

Linkler;

[1] http://www.maxmind.com/app/ip-location
[2] http://www.maxmind.com/app/country
[3] http://www.maxmind.com/app/city
[4] http://www.maxmind.com/app/geolitecountry
[5] http://www.maxmind.com/app/geolitecity

Written by leoman

June 5th, 2010 at 8:34 pm

SEO, .htaccess ve klasör değişiklikleri

one comment

Blog’umu kaybettiğimi çok geç farkettikten sonra haliyle arama motorlarının da artık blog’umu yanlış içerikleri ve yanlış linkleri ile gösterir durum olduğunu anladım. Arama motorlarının, tarama sırasında defalarca 404 hatası ile karşılaşmaktan hoşlanmayacağı için buna SEO dostu bir çözüm bulmak gerekmek idi.

Gidişata göre şanslı olduğum noktalar sırası ile Apache gibi kolay esneyebilen yapıda bir web sunucu kullanmam, eski blogumun ana dizinde değil de bir alt dizinde (/blg alt dizininde) olması idi.

Bildiğiniz üzre Apache web sunucusu .htaccess adlı bir dosya ile şahsa ve isteklere münhasır hale getirilebilmekte ve mod_rewrite modülü ile de URL‘ler üzerinde dilediğiniz gibi değişiklik yapma imkanı sunmaktadır. Bu imkanlar dahilinde ben de arama motorlarınca eski blogumdaki işaretlenen linkleri, gelen ziyaretçilere (özellikle arama motoru robotlarına {örneğin: Google bot} ) buradan taşındığını belirtmeyi seçtim. Böylece arama motorları bu sayfaları bir daha blog’um üzerinde aramayacaktı ve arama sonuçlarından kısa sürede kalkacaktır.

Bunun nasıl yaptım!

Blog’umun hali hazırda kullanmış olduğu .htaccess dosyası içerisine yalnızca bir satır eklemek bunun için yeterli oldu.


RewriteEngine On
RewriteBase /
RedirectMatch 301 /blg(.*) /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

Burada birinci satırla beraber rewrite modülü aktif hale getirip ikinci satır ile birlikte kök ve tüm alt dizinleri  için geçerli olduğunu belirttik. Asıl olayımız ise üçüncü satırda, kök dizin içerisinde blg ile başlayan herhangi bir URL olduğunda HTTP 301 hata kodu, yani kalıcı olarak buradan taşındı yönlendirme direktifi oluşturarak tekrar kök dizine yönlendirmesi ile tamamlanmış oldu. Böylece artık arama motorları, dışarıdan gelen linkler http://leoman.gen.tr/blg/eski-bir-post sayfasına ulaşamadıklarında “404 – sayfa bulunamadı” hatası almak yerine bu sayfanın burda olmadığına dair bir yönlendirme alacaklar ve http://leoman.gen.tr/ adresine yönlenecekler. Böylece kimse tarafından kötü çocuk olarak gözükmeyeceğim.

Bu gibi bir değişikliği ise sadece bir alt klasörden kök dizine taşımak için yapacaksanız şu direktifi de kullanabilirsiniz.

RedirectMatch 301 /blg(.*) /$1

Örneğe göre; http://leoman.gen.tr/blg/eski-bir-post adresine gelen istekler http://leoman.gen.tr/eski-bir-post adresine yönlenecekler.

Bol SEO’lu 404’süz günler efendim.

Written by leoman

December 16th, 2008 at 3:22 am