Ana sayfa Teknoloji Apache mod_rewrite | .htaccess ile URL yönlendirme Nasıl Yapılır ?

Apache mod_rewrite | .htaccess ile URL yönlendirme Nasıl Yapılır ?

Apache re_write URL dizilerinin sayfa açılımı sırasında değiştirilmesine olanak veren bir apache web sunucusu modülüdür. mod_rewrite’ın ilk başta anlaşılması zor gelebilir ancak ne yaptığınızı biliyorsanız çok kullanışlı bir araç haline gelecektir. Üretici firmanın sağladığı mod_rewrite belgeleri bu linktedir.

Apache mod_rewrite kullanım alanları:

  • URL Yönlendirme Ör: veriportal.com‘u veriportal.com.tr‘ye yönlendirme gibi
  • Tarayıcı Yönlendirme Ör: İnternet Explorer versiyon 7’den düşük ise yüksek teknolojili olan siteden ziyade daha sade bir dizine yönlendirme gibi
  • Bot Yönlendirme, Ör: google_bot’u SEO optimizasyonu için içinde sadece statik linklerin olduğu bir sayfaya yönlendirme
  • Tarayıcı diline göre farklı alt dizine yönlendirme
  • Resim dosyalarının hotlink yapılmasını engelleme, Ör: Site resimlerinizin başka siteler tarafından kullanılıp bant genişliğinizin tüketilmesini engelleyebilirsiniz.
  • SEO Optimizasyonu, Ör: php, aspx gibi dinamik sayfaların .html gibi statik gösterilmesi

gibi amaçlar için kullanılır.

 

Apache Mod_rewrite kullanabilmeniz için httpd.conf ya da VirtualHost ayarlarında şu ibarelerin olması gerekmektedir:

OPTIONS  FollowSymLinks
# ya da
OPTIONS All
#ve
AllowOverride All
#ya da
AllowOverride FileInfo

 

mod_rewrite’ı kullanmak için web sitenizin kök dizininde bir “.htaccess” dosyası oluşturmanız gerekmektedir. UNIX türevi işletim sistemlerinde gizli dosyaların başına nokta koyulur, FTP gibi erişim programlarında htaccess dosyasının görünmemesinin sebebi budur. Bu nedenle htaccess dosyasının bir yedeğini mutlaka tutunuz.

.htaccess dosyası şu ifade ile başlamalıdır:

# Apache URLleri degistireceğimizi bilmelidir

RewriteEngine On

# Bu satirdan sonra hangi URLleri degistirecegimizi yazacagiz

rewrite bir algoritma gibi çalışmaktadır, öncelikle ona hangi istekleri değiştireceğimizi söylemeliyiz bunu RewriteCond ifadesi ile yapıyoruz.

RewriteCond ifadesi

Kullanım şekli:

RewriteCond [İFADE]+[NC]+[OR]

RewriteCond apache ile temas kuran tarayıcının (Internet Explorer, Mozilla Firefox ve Google Chrome gibi) apache’ye gönderdiği ön bilgilerden, IP adresinden ya da yönlendiren sitelerden gelen bilgileri işler, en çok kullanılan ifadeler şunlardır:

REQUEST_FILENAME : istenilen sayfanın ismi (index.php gibi)
HTTP_USER_AGENT : Kullanılan tarayıcı ya da bot ismi (Firefox için: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1 gibi)
QUERY_STRING : Sour işaretinden sonraki sorgulama ifadesi (index.php?page=anasayfa gibi)
SERVER_PROTOCOL : http ya da https
HTTP_HOST : alan adı
THE_REQUEST : Talep edilen sayfa (arama.php gibi)
HTTP_REFERER : Sayfayı talep eden site

[NC] (No Case)
Bu ek, aranan ifadenin büyük/küçük harf duyarsız olmasını sağlar.

[OR] (veya)
Birden çok RewriteCond ifadesinin birleştirilmesi için kullanılır.

 

RewriteRule ifadesi

Bu ifade ile bulunan koşuldan sonra URL’nin nasıl yazdırılacağı belirtilir:

[R] (yönlendirmeye zorla)
Harici bir adrese yönlendir.

[F] (İzin verilmeyen)
Bu sayfaya giriş izni olmadığını belirten bir sayfaya yönlendirir.

[L] (son kural)
Bu ifadenin en son ifade olduğunu belirtir, bu noktadan sonraki hiçbir kural çalışmaz

 

Örneklerle hepsini bir araya toplayalım:

Resim dosyalarınızın site dışından çağırılmasını engellemek

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !^http://alanadiniz.com [NC]
RewriteCond %{HTTP_REFERER} !^http://www.alanadini.com [NC]
RewriteCond %{HTTP_REFERER} !^http://192.168.1.10 [NC]
RewriteRule ^.*$ http://www.alanadiniz.com/hotlink.jpg [R,L]

Türkçesi: Alan adınızın alanadiniz.com olduğunu ve bu alan adının sunulduğu IP adresinin 192.168.1.10 olduğunu varsayarak
1- Rewrite motorunu aç
2- HTTP_REFERER bilgisi varsa ve
3- HTTP_REFERER alanadiniz.com değilse veya
4- HTTP_REFERER www.alanadiniz.com değilse veya
5- HTTP_REFERER IP adresiniz değilse
6- http://www.alanadiniz.com/hotlink.jpg resmine yönlendir.

Alternatif:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?alanadiniz\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*\.(jpe?g|gif|bmp|png)$ http://www.alanadiniz.com/hotlink.jpg [L]

Ayrıca, başka bir resime yönlendirmek yerine [F] ile yasaklayabilirsiniz:

RewriteRule .*\.(jpe?g|gif|bmp|png)$ – [F]

 

www yönlendirme

alanadiniz.com, ikincialanadiniz.com gibi birden çok alan adı aynı siteye açılıyorsa ya da bütün sitelerin önünde mutlaka www. olmasını istiyorsanız aşağıdaki örneği kullanabilirsiniz:

 

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.alanadiniz.com$ [NC]
RewriteRule ^(.*)$ http://www.alanadiniz.com/$1 [R,L]

 

Tarayıcıya göre yönlendirme

Tarayıcıya göre yönlendirme, özellikle tarayıcılar arasında javascript veya css yorumlamada farklılıklar olduğunda kullanılır. Ayrıca googlebot gibi sitenizi arama motorlarında indeksleyen tarayıcıları da daha sade içerikli, içerisinde javascriptler ve css bulunmayan bir sayfaya da yönlendirebilirsiniz. Bu şekilde arama motorlarının hata yapma olasılığı azalır ve daha üst sıralarda yer alabilirsiniz.

RewriteEngine On

# MS Internet Explorer – Mozilla v4
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/4(.*)MSIE
RewriteRule ^index\.html$ /explorer.html [L]

# Chrome – Mozilla v5 – Firefox kuralindan once olmalidir
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/5(.*)Chrome
RewriteRule ^index\.html$ /chrome.html [L]

# Firefox – Mozilla v5
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/5(.*)Gecko
RewriteRule ^index\.html$ /firefox.html [L]

# Googlebot
RewriteCond %{HTTP_USER_AGENT} ^Googlebot/2(.*)googlebot
RewriteRule ^index\.html$ /google.html [L]

# Lynx ya da Mozilla v1/2
RewriteCond %{HTTP_USER_AGENT} ^Lynx/ [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/[12]
RewriteRule ^index\.html$ /resimsiz.html [L]

# Diğerleri
RewriteRule ^index\.html$ /index.html [L]

 

Günün saatine göre farklı açılış sayfası

RewriteEngine On
RewriteBase /

# 5:00 > < 8:00
RewriteCond %{TIME_HOUR} >02
RewriteCond %{TIME_HOUR} <05
RewriteRule ^index\\.html$ /gunduz.html

# 8:00 > < 16:00
RewriteCond %{TIME_HOUR} >05
RewriteCond %{TIME_HOUR} <13
RewriteRule ^index\\.html$ /gun.html

# 16:00 > < 22:00
RewriteCond %{TIME_HOUR} >13
RewriteCond %{TIME_HOUR} <19
RewriteRule ^index\\.html$ /aksam.html

# 22:00 > < 05:00
RewriteCond %{TIME_HOUR} >19
RewriteCond %{TIME_HOUR} <02
RewriteRule ^index\\.html$ /gece.html

 

HTTP sayfayı HTTPS’e yönlendirme

RewriteEngine on
rewritecond %{https} !^on$
rewritecond %{QUERY_STRING} siparis$ [NC]
RewriteRule .* https://alanadiniz.com/siparis [R=301,L]

 

Tarayıcı Diline Göre Yönlendirme

RewriteEngine on

# ingilizce
RewriteCond %{HTTP:Accept-Language} ^en [NC]
RewriteRule ^$ /en/ [L,R=301]

# Almanca
RewriteCond %{HTTP:Accept-Language} ^de [NC]
RewriteRule ^$ /de/ [L,R=301]

# ispanyolca
RewriteCond %{HTTP:Accept-Language} ^es [NC]
RewriteRule ^$ /es/ [L,R=301]

#Diger butun diller ve Varsayilan dil Turkce
RewriteRule ^$ /tr/ [L,R=301]

 

Birden çok alan adını tek bir alan adında toplamak

Eğer sitenize ait birden çok alan adı varsa, örneğin veriportal.com, veriportal.net, veriportal.com.tr gibi ve sadece bir siteden bu sayfaların açılmasını istiyorsanız (istemelisiniz çünkü site rankınız bölünecektir) aşaıdaki adımları uygulayınız:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^(www\.)?veriportal.org [NC,OR]
RewriteCond %{HTTP_HOST} ^(www\.)?veriportal.info [NC,OR]
RewriteCond %{HTTP_HOST} ^(www\.)?veriportal.net [NC,OR]
RewriteCond %{HTTP_HOST} ^(www\.)?veriportal.com.tr [NC]
RewriteRule ^(.*)$ http://www.veriportal.com/$1 [R=301,NC, L]

BİR CEVAP BIRAK