Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi
CodeIgniter uygulamasında temiz URL kullanmak için, web sunucusu Apache ise .htaccess dosyasını uygulamanın web köküne yerleştirip mevcut olmayan dosya ve dizin isteklerini giriş dosyasına yönlendirebilirsiniz. CodeIgniter 3'te bu dosya genellikle index.php dosyasının bulunduğu dizindedir. CodeIgniter 4'te ise web sunucusunun belge kökünü mümkünse projenin public dizinine ayarlamak ve bu dizindeki hazır kuralları korumak daha güvenlidir.

CodeIgniter 3 için temel .htaccess​


index.php dosyasının bulunduğu dizinde .htaccess adında bir dosya oluşturun. Aşağıdaki, CodeIgniter 3 kılavuzundaki temel örnektir:

Kod:
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

Bu kuralda gerçek bir dosya veya dizin doğrudan sunulur. Örneğin CSS, JavaScript, görsel ve yüklenmiş dosyalar mevcutsa PHP giriş dosyasına gönderilmez. Diğer istekler index.php dosyasına aktarılır ve rotayı CodeIgniter değerlendirir.

Bu örnek her Apache/PHP yerleşiminde otomatik çalışmaz. CodeIgniter 3 için application/config/config.php içinde index_page değerini boş bırakın ve base_url değerini gerçek site adresine ayarlayın. Örneğin alt dizinde https://example.com/app/ kullanılabilir. uri_protocol varsayılan olarak REQUEST_URI kullanır; rotalar çalışmıyorsa bunu sunucunun sağladığı değişkenlerle karşılaştırın. PATH_INFO veya farklı giriş dosyası kuralına körlemesine geçmeyin.

Apache izinleri ve .htaccess bağlamı​


.htaccess dosyasının okunabilmesi için Apache yapılandırmasında ilgili dizine en az AllowOverride FileInfo izni verilmesi ve mod_rewrite kurallarının kullanımına izin tanınması gerekir. Örnek yapılandırma:

Kod:
<Directory "/var/www/example.com">
    AllowOverride FileInfo
    Options +SymLinksIfOwnerMatch
    Require all granted
</Directory>

AllowOverride None kullanılıyorsa Apache .htaccess dosyasını yok sayar. Sunucu yapılandırmasına erişiminiz yoksa hosting sağlayıcınızdan mod_rewrite ve gerekli override izinlerini etkinleştirmesini istemelisiniz. Bu <Directory> bloğu ana Apache yapılandırması içindir; .htaccess içine yapıştırılmaz. Dizin için FollowSymLinks veya SymLinksIfOwnerMatch koşulu da sağlanmalıdır. Ana yapılandırmaya erişiminiz varsa uygun bağlamdaki kuralları orada tutabilirsiniz; sanal host ve .htaccess desenleri aynı bağlama sahip değildir.

Alt dizinde çalışan uygulama​


Uygulama example.com/app altında yayınlanıyorsa .htaccess dosyasını uygulamanın alt dizinine koyun. Apache, .htaccess içindeki RewriteRule desenini bu dizine göre değerlendirir; bu nedenle desenin başına / eklemeyin.

Örnek:

Kod:
RewriteEngine On
RewriteBase /app/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

RewriteBase her kurulumda zorunlu değildir; ancak URL yolu ile fiziksel dizin yolu farklıysa, örneğin Alias veya özel bir alt dizin kullanılıyorsa gerekli olabilir. CSS, JavaScript ve görsel yollarının da /app/ önekini doğru kullandığını ayrıca kontrol edin.

Aşağıdaki tablo, karar vermeyi kolaylaştırır:

DurumDosyanın yeriÖnerilen yaklaşım
CodeIgniter 3, alan adı köküUygulama web köküMevcut olmayan istekleri index.php dosyasına yönlendir
CodeIgniter 3, alt dizinUygulama alt diziniKuralı alt dizin bağlamında yaz, gerekirse RewriteBase ekle
CodeIgniter 4Projenin public diziniBelge kökünü public yap ve hazır kuralları koru
Kural hiç çalışmıyorApache yapılandırmasıAllowOverride ve mod_rewrite ayarlarını incele

CodeIgniter 4 için güvenli yerleşim​


CodeIgniter 4 uygulamasında web sunucusunun belge kökünü doğrudan projenin ana dizinine vermek yerine public dizinine yönlendirin. Böylece uygulamanın yapılandırma ve kaynak dosyaları web üzerinden doğrudan erişilebilir bir konuma taşınmamış olur. public içindeki dağıtımla gelen .htaccess dosyasını silmeden önce inceleyin; kendi kurallarınızı mevcut istisnaları bozmayacak şekilde ekleyin. Hazır dosyada Options gibi ek direktifler bulunabileceğinden yalnız FileInfo izni bütün dosyaya yetmeyebilir; gereken izinleri sunucu yöneticisi dağıtım dosyasına göre belirlemelidir.

Kontrol ve sorun giderme​


  1. .htaccess dosyasının adının .htaccess.txt olmadığını ve doğru web kökünde bulunduğunu kontrol edin.
  2. Önce mevcut bir CSS veya görsel dosyasını, ardından CodeIgniter rotasını test edin.
  3. Statik dosya açılıyor fakat rota açılmıyorsa RewriteRule ve uygulama rotasını inceleyin.
  4. 500 hatasında Apache hata günlüğünü kontrol edin; tanınmayan direktif veya izin problemi genellikle burada görünür.
  5. Döngü oluşuyorsa giriş dosyasının yeniden aynı kurala yakalanmadığını kontrol edin. !-f koşulu bu tür tekrarları önlemede önemlidir.
  6. Yeniden yönlendirme kuralları ekleyecekseniz kalıcı 301 yerine test aşamasında geçici 302 kullanın; tarayıcılar 301 yanıtlarını önbelleğe alabilir.

Sık yapılan hatalar​


.htaccess bağlamında RewriteRule desenine gereksiz baştaki / karakterini koymak, !-f ve !-d koşullarını kaldırmak, CodeIgniter 4'te belge kökünü public yerine proje ana dizinine vermek ve Apache günlüklerini incelemeden rastgele kural değiştirmek en yaygın hatalardır. Ayrıca ana Apache yapılandırmasına erişiminiz varsa .htaccess yerine sanal host yapılandırmasını tercih etmek daha kontrollü olabilir.

Sık sorulan sorular​


Neden 404 yerine 500 hatası alıyorum?​


Genellikle hatalı sözdizimi, desteklenmeyen bir direktif, eksik Apache modülü veya yanlış AllowOverride ayarı söz konusudur. İlk kontrol noktası Apache hata günlüğüdür.

Dosya açılıyor ama uygulama hâlâ index.php içeren bağlantılar üretiyorsa ne yapmalıyım?​


Yeniden yazma ile bağlantı üretimi farklı işlemlerdir. CodeIgniter 3'te index_page ve base_url, CodeIgniter 4'te ilgili App yapılandırması ile mevcut eklenti/şablon bağlantıları incelenmelidir. .htaccess tek başına HTML içine yazılmış eski bağlantıları değiştirmez.

Apache yerine Nginx kullanıyorsam bu dosya çalışır mı?​


Hayır. .htaccess Apache'ye özgüdür ve Nginx tarafından okunmaz. Bu durumda aynı yönlendirme mantığı Nginx sunucu yapılandırmasında tanımlanmalıdır.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.