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

Laravel .htaccess yapılandırması​


Laravel uygulamasında doğru yapılandırma, alan adının proje kökünü değil public klasörünü göstermesi ve bu klasördeki .htaccess dosyasının mevcut dosya ve dizinler dışındaki istekleri index.php dosyasına yönlendirmesidir. Böylece /login, /users/15 gibi yollar Laravel yönlendiricisine ulaşır; public/css ve public/storage gibi gerçek dosyalar ise doğrudan sunulur.

Ön koşullar ve dosya konumu​


Apache üzerinde mod_rewrite etkin olmalıdır. Ayrıca sunucu, ilgili dizindeki .htaccess yönergelerine izin vermelidir. AllowOverride ve AllowOverrideList birlikte gerekli yönergelere izin vermiyorsa kurallar okunmaz veya izin hatası oluşur.

Önerilen dizin yapısı şöyledir:

Kod:
/var/www/example-app/
├── app/
├── bootstrap/
├── config/
├── public/
│   ├── .htaccess
│   ├── index.php
│   └── build/
├── resources/
└── storage/

Sanal konak veya Apache yapılandırmasında belge kökü /var/www/example-app/public olmalıdır. Yetkili yönetici, gerçek dizin için sunucunun ana Apache yapılandırmasında gerekli izinleri tanımlamalıdır. Aşağıdaki örnek yol uyarlanmalıdır; bu blok .htaccess içine yazılmaz:

Kod:
<Directory "/var/www/example-app/public">
    AllowOverride Options FileInfo
    Require all granted
</Directory>

Paylaşımlı hosting kullanıyorsanız bu bölüm çoğunlukla hosting firması tarafından hazırlanır. Kuralları yazmadan önce sağlayıcınızın Apache ve mod_rewrite desteğini doğrulayın.

Laravel .htaccess dosyasının temel parçaları​


Önce projenizin kullandığı Laravel dağıtımıyla gelen public/.htaccess dosyasını koruyun. Aşağıdaki sadeleştirilmiş örnek, resmî iskeletteki temel akışı açıklar; sürümünüze veya uygulamanıza özgü kuralları körlemesine değiştirmek için verilmemiştir:

Kod:
<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    RewriteCond %{HTTP:X-XSRF-TOKEN} .
    RewriteRule .* - [E=HTTP_X_XSRF_TOKEN:%{HTTP:X-XSRF-TOKEN}]

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

RewriteEngine On yeniden yazmayı etkinleştirir. !-d ve !-f koşulları, gerçek dizinlerin ve dosyaların Laravel'e gönderilmesini engeller. Son kural yalnızca bulunamayan yolları index.php dosyasına aktarır. Kimlik doğrulama ve XSRF başlıkları için kullanılan iki kural, bazı PHP çalışma biçimlerinde bu HTTP başlıklarının uygulamaya ulaşmasına yardımcı olur.

Uygulama ve test adımları​


  1. Alan adının belge kökünü proje içindeki public klasörüne ayarlayın; proje kökünü belge kökü yapmak .env, vendor veya diğer özel dosyaların yanlışlıkla sunulmasına yol açabilir.
  2. Kullanılan Laravel sürümünün özgün public/.htaccess dosyasını karşılaştırın; mevcut güvenlik ve uygulama kurallarını koruyarak gerekli düzeltmeyi yapın. Dosya adının yanlışlıkla .htaccess.txt olmadığını kontrol edin.
  3. Önce http://example.com/ adresini, ardından uygulamadaki bir Laravel rotasını ve var olan bir statik dosyayı açın.
  4. Ana sayfa ve Laravel rotası çalışıyor, statik dosya doğrudan yükleniyorsa temel yapılandırma doğrudur. Olmayan bir rota için Laravel'in kendi 404 yanıtını görmeniz de yeniden yazmanın çalıştığını gösterir.
  5. Kurallar etkisizse önce Apache hata günlüğünü, belge kökünü, mod_rewrite durumunu ve AllowOverride değerini kontrol edin. 500 Internal Server Error alıyorsanız özellikle Options -MultiViews -Indexes satırının sunucuda izinli olup olmadığını inceleyin.

Sorunlara göre doğru karar​


Aynı belirti farklı bir yapılandırma hatasından kaynaklanabilir. Kontrol sırasını aşağıdaki gibi kullanmak gereksiz değişiklikleri önler.

BelirtiMuhtemel nedenKontrol veya çözüm
Tüm rotalar 404 dönüyorYeniden yazma etkin değil veya .htaccess okunmuyormod_rewrite ve AllowOverride FileInfo değerlerini kontrol edin
Ana sayfa açılıyor, alt rotalar 404 oluyorİstek index.php dosyasına yönlenmiyorpublic/.htaccess konumunu ve RewriteRule satırını kontrol edin
CSS ve JavaScript yüklenmiyorBelge kökü yanlış veya varlık yolları hatalıBelge kökünün public olduğundan emin olun
500 Internal Server Errorİzin verilmeyen Options veya hatalı sözdizimiApache hata günlüğünü okuyun; gerekirse Options satırını hosting desteğiyle uyumlu hale getirin

Tablodaki belirtilerden özellikle “ana sayfa çalışıyor, alt rotalar çalışmıyor” durumu, çoğunlukla PHP veya Laravel kodundan önce Apache katmanındaki yeniden yazma ayarına işaret eder. index.php dosyasını elle farklı bir klasöre taşımak yerine önce public belge kökünü düzeltin.

Sık yapılan hatalar​


  1. .htaccess dosyasını proje köküne koymak: Apache belge kökü public ise kural dosyası da genellikle public/.htaccess altında olmalıdır.
  2. Gerçek dosya koşullarını kaldırmak: !-f ve !-d koşulları silinirse resim, CSS veya JavaScript istekleri gereksiz yere Laravel'e gönderilebilir.
  3. public klasörünü URL'ye eklemek: Uygulama example.com/public üzerinden çalışıyorsa kalıcı çözüm genellikle URL'ye klasör eklemek değil, Apache belge kökünü public yapmaktır.
  4. Kuralları art arda çoğaltmak: Birden fazla RewriteRule bloğu yönlendirme döngüsü oluşturabilir. İstek yolunu ve mevcut kuralları inceleyerek döngüyü test ortamında daraltın; çalışan dosyayı topluca silmeyin.

Sık sorulan sorular​


Nginx kullanıyorsam bu .htaccess dosyası çalışır mı?​


Tek başına Nginx bu dosyayı okumaz; Nginx sunucu bloğu yapılandırılır. Nginx önde, Apache arkada ise Apache’ye ulaşan isteklerde .htaccess uygulanabilir. Önce gerçek sunucu zincirini doğrulayın.

Laravel'i alt klasörde çalıştırmak için RewriteBase eklemeli miyim?​


Her kurulumda gerekmez. Önce belge kökünü doğrudan Laravel'in public klasörüne ayarlayın. Uygulama zorunlu olarak bir alt URL altında çalışacaksa gerçek sunucu yolu, sanal konak ayarı ve asset URL'leri birlikte değerlendirilmelidir; yalnızca RewriteBase eklemek tek başına çözüm değildir.

PHP dosyası indiriliyorsa sorun .htaccess'te midir?​


Bu bir PHP işleyicisi sorunu veya yanlış sunum yapılandırması olabilir. Kaynak kodunun indirilmesi hassas bilgi açığa çıkarabileceğinden yayını sınırlandırıp hosting yöneticisine başvurun; yalnız rewrite kuralı ekleyerek çözmeye çalışmayın.
 

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.
Robotlar:
  • Anthropic