CodeIgniter 3, hafif yapısı ve kolay öğrenilebilir yapısıyla hâlâ birçok projede kullanılan popüler bir PHP framework’üdür. Framework içerisinde en sık kullanılan yardımcı fonksiyonlardan ikisi base_url() ve site_url() fonksiyonlarıdır. Her ikisi de URL oluşturmak için kullanılır ancak amaçları ve çalışma biçimleri önemli ölçüde farklıdır.
Bu yazıda iki fonksiyonun kullanım amaçlarını, çıktılarındaki farkı ve hangi senaryoda hangisini tercih etmen gerektiğini örneklerle anlatıyorum.
1. base_url() Fonksiyonu Nedir?
base_url(), adından da anlaşılacağı gibi uygulamanın kök URL’sini döndürmek için kullanılır.
Bu değer, application/config/config.php içindeki base_url ayarından alınır:
$config['base_url'] = 'https://www.orneksite.com/';
✔ Ne zaman kullanılır?
Statik dosya yolları verirken
CDN veya asset klasörlerine bağlantı oluştururken
Doğrudan proje kök dizinine göre bir URL üretmek istediğinde
✔ Örnek kullanım:
echo base_url('assets/css/style.css');
✔ Çıktı:
https://www.orneksite.com/assets/css/style.css
Bu fonksiyon, routing dikkate almaz, sadece kök URL’nin sonuna verilen yolu ekler.
2. site_url() Fonksiyonu Nedir?
site_url() ise CodeIgniter’ın routing mantığını kullanarak controller/metod tabanlı URL’ler oluşturur.
Hem base_url hem de index_page ayarlarını dikkate alır:
$config['index_page'] = 'index.php';
✔ Ne zaman kullanılır?
Controller/metod şeklinde yönlendirme yapılacaksa
Uygulama içi sayfa linkleri oluşturuluyorsa
URL segmentleriyle çalışan yapılar kullanılıyorsa
✔ Örnek kullanım:
echo site_url('blog/yazi/23');
✔ Çıktı:
https://www.orneksite.com/index.php/blog/yazi/23
Eğer index.php kaldırıldıysa .htaccess ile, çıktı şu şekilde olur:
https://www.orneksite.com/blog/yazi/23
Bu yönüyle site_url(), MVC yapısı içinde yönlendirme yapmak için ideal bir fonksiyondur.
3. Farkı Basitçe Özetleyelim
| Özellik | base_url() | site_url() |
|---|---|---|
| Döndürdüğü URL | Tamamen kök URL | Routing’e uygun URL |
| Kullanım amacı | Statik dosyalar, asset bağlantıları | Sayfa linkleri, controller/metod URL’leri |
| index.php etkisi | YOK | VAR |
| URL segmentleri | Düz eklenir | CI’nin URL yapısına göre oluşturulur |
4. Hangi Fonksiyon Ne Zaman Kullanılmalı?
Aşağıdaki kural aslında her şeyi özetler:
🔹 Statik dosyalar → base_url()
🔹 Sayfa linkleri → site_url()
Örnek:
<!-- Doğru kullanım --> <link rel="stylesheet" href="<?= base_url('assets/css/style.css') ?>"><!-- Controller/metod yönlendirmesi -->
<a href="<?= site_url('blog/kategori/teknoloji') ?>">Teknoloji</a>
5. Bonus: index.php’yi URL’lerden Kaldırmak İstersen
Eğer proje kök dizinine bir .htaccess koyarak index.php’yi gizlemek istersen aşağıdaki yapı işini görecektir:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
Bu ayardan sonra site_url() artık temiz URL üretir.
Sonuç
CodeIgniter 3 içerisinde base_url() ve site_url() çoğu zaman karıştırılabilir ancak işlevsel olarak birbirinden çok farklıdır.
base_url(), basit ve düz bağlantılar oluşturur.site_url()ise routing yapısına uygun uygulama içi linkler üretmek için gereklidir.
Doğru fonksiyonu doğru yerde kullanmak, proje yapısını hem daha düzenli hem de daha güvenilir hale getirir.