Pazar, 31 Ağustos 2008

URL Yönlendirmesi

 

CodeIgniter kurulduktan sonra yapılması gerekli bir diğer ayar da Apache server kullanıcıları için htaccess dosyasında yapılacak url yönlendirmesi ayarıdır.

CodeIgniter adres linki SEO (arama motoru optimizasyonu)'na uygun olarak düzenlenebileceği için http://siteadi/index.php/controller/method/var1 diye özetlenebilecek sırada düzenlenmiştir. CodeIgniter diğer bir çok MVC çatısı gibi tek dosya giriş noktası (single file entry point) mekanizması ile düzenlenmiştir. Siteye giriş için yapılan her adres, index.php dosyası üzerinden yönlendirilir. Apache server`larda .htaccess dosyasını gerektiği gibi düzenleyerek link içinde geçen index.php dosyasının adını kaldırmamız mümkündür.

Eğer CodeIgniter kök dizinin altında başka bir isim ile (örneğimizde "blog" olsun) kuruluysa, htaccess dosyası da bu dizinin içinde bulunmalıdır. htaccess dosyamızın içeriği aşağıdaki gibi olabilir:

RewriteEngine on
RewriteRule ^$ /blog/index.php [L]
RewriteCond $1 !^(index\.php|images|css|js|video_files|robots\.txt|favicon\.ico)
RewriteRule ^(.*)$ /blog/index.php/$1 [L]

İlk satırda sunucuya kendi kurallarımızı yazacağımız söylenmektedir. İkinci satırda, adres satırında bir değişken yoksa varsayılan bağlantının index.php dosyasına yapılması gerektiği yazılıdır. Üçüncü satırda CodeIgniter`ın karışmadığı, içinde CI dosyalarının bulunmadığı dizinler (images, js, css gibi dosyaların bulunduğu) tanımlıdır. Dördüncü satırda ise yularıda bahsedilen http://siteadi/index.php/controller/method/var1 adresinin kullanıcı tarafından adres satırına girilmesi durumunda CI`nın nasıl hareket edeceği gösterilir. Bu satır ile birlikte adres satırında index.php dosyasının adını artık göremeyiz.

Son not olarak SEO`ya uygun adreslendirmede mümkün olduğunca adres satırında numaralar yerine jenerik isimler kullanmanızı tavsiye ederiz.

Yorumlar

Index.php 'nin url d görünmemesini istiyorsak application/config/config.php dosyası içindeki $config['index_page'] değişkenine boşluk atamanız gerekir. Orada index.php değeri yazdığı müddetçe url satırında index.php görünecektir.

Ben  $config['index_page'] 'e boşluk atadım fakat formdan bilgi gönderdiğimde site_url/index.php/controller   olarak işlem yapıyo... 

Yani site_url/controller  şeklinde yapmaya çalıştıımda sayfa bulunamadı diyor?

Adres yönlendirmesinde http://site_adi/kategori-adi/yazi-adi
şeklinde linklendirme yapmak istiyorum.
Fakat bunu codeigniter a nasıl algılattırıp doğru bilgiyi ekranda göstertebilirim.?

@Kenan: Burada remap fonksiyonunu anlattığım yazı işini görebilir.

Merhaba.

.htaccess dosyasını C:\xampp\htdocs\ci dizini altına sizin yazdıklarınız yazarak kaydettim. Ancak erişim için hala index.php eklemem gerekiyor. Bu adresi denediğimde localhost/ci/ilkcontroller Object Not Found hatası veriyor. Yardımcı olabilir misiniz?

@Umut: application/config altındaki config.php dosyasında bulunan, $config['index_page'] değişkenindeki "index.php" değerini silmen, boş değer ataman lazım. 

@Fatih: onu da yaptım. Yine olmuyor. Bir türlü anlayamadım. Acaba .htaccess dosyasını mı hatalı yapıyorum.Siz nasıl oluşturuyorsunuz? Normalde windows isimsiz dosyalara izin vermiyoru. Bende apache dizini altındaki .htaccess dosyalarından birisini kopyalayıp içeriğini değiştirdim.

@Fatih: En sonunda hallettim. Kodun 2. satırında yapmam gereken değişikliği unuttuğum için çalışmamış. Teşekkür ederim.

Pekı gelen başlığı ceksek lınkte bu sekılde lınk.com/controller/mysqlden gelen baslik o zaman turkce karak ter ve boşlık sorunu olmıcakmı ? o şekil yapmasak id cekersek seo ıcın yararlı olurmu ?

@Onur: Bu blogun adres satırına bakarsan isimlerin nasıl url'ye eklendigi konusunda bir fikrin olabilir. Temelde Türkçe karakterleri İngilizce karakterlere çevirip, aradaki boşuklara alt çizgi eklemen ve bu değeri veritabanına o yazıyı bulacak şekilde kayıt etmen yeterlidir.

Yorum Ekle