- Konu sahibi
- #1
CodeIgniter uygulamasında temiz URL kullanmak için, web sunucusu Apache ise
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
Bu örnek her Apache/PHP yerleşiminde otomatik çalışmaz. CodeIgniter 3 için
Uygulama
Örnek:
Aşağıdaki tablo, karar vermeyi kolaylaştırır:
CodeIgniter 4 uygulamasında web sunucusunun belge kökünü doğrudan projenin ana dizinine vermek yerine
Genellikle hatalı sözdizimi, desteklenmeyen bir direktif, eksik Apache modülü veya yanlış
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.
Hayır.
.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:
| Durum | Dosyanı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 dizin | Uygulama alt dizini | Kuralı alt dizin bağlamında yaz, gerekirse RewriteBase ekle |
| CodeIgniter 4 | Projenin public dizini | Belge kökünü public yap ve hazır kuralları koru |
| Kural hiç çalışmıyor | Apache 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
.htaccessdosyasının adının.htaccess.txtolmadığını ve doğru web kökünde bulunduğunu kontrol edin.- Önce mevcut bir CSS veya görsel dosyasını, ardından CodeIgniter rotasını test edin.
- Statik dosya açılıyor fakat rota açılmıyorsa
RewriteRuleve uygulama rotasını inceleyin. - 500 hatasında Apache hata günlüğünü kontrol edin; tanınmayan direktif veya izin problemi genellikle burada görünür.
- Döngü oluşuyorsa giriş dosyasının yeniden aynı kurala yakalanmadığını kontrol edin.
!-fkoşulu bu tür tekrarları önlemede önemlidir. - Yeniden yönlendirme kuralları ekleyecekseniz kalıcı
301yerine test aşamasında geçici302kullanı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.