Merhabalar, laravel projelerinizi cpanel(public_html), plesk(httpdocs) veya kök dizini sabit olan herhangi bir paylaşımlı hosting panelinde kurarken fark edeceğiniz gibi Laravel kök dizini public olarak isimlendiriyor ve bu probleme yol açıyor.
Bu makalede sizlere bu durumda yapmanız gerekeni aktaracağım. Ek olarak da storage dosyası kısayolu oluşturmayı da aktaracağım.
Bu videoda yer alan bilgileri gerçek bir sunucuda test etmek ister misin? Bu linki kullanarak hetzner’e üye ol ve 20 Euro indirim kazan: https://hetzner.cloud/?ref=WvXVsBDPadMB
Hızlı WordPress Hosting : https://www.guzel.net.tr/aff.php?aff=628
cPanel laravel Kurulumu
Öncelikle laravel projenizin ana dizininde yani .env dosyasının bulunduğu dizinde bir .htaccess dosyası oluşturuyorsunuz ve içeriğini aşağıdaki gibi dolduruyorsunuz.
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -Indexes
</IfModule>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
Bu işlemin ardından proje ana dizini şu şekilde görünecektir.

Şimdi bu projeyi direk hostin’e bu şekilde yükleyebilirsiniz. Kök dizine gelen istekler otomatik olarak /public e yönlendirilecek. Link yapısında bir değişikliğe gerek kalmayacak.
Ek olarak sizlere storage:link ile nasıl storage/public dizininiz için public/storage şeklinde kısayol oluşturacağınızı anlatacağım.
Önceki adımda link yapımızı koruduk. Ama bununla bitmedi. Bildiğiniz gibi laravel içerisinde dosya yükleme işlemlerinde eğer özellikle public dizini belirtmediyseniz yüklediğiniz dosyalar storage/public içerisine yükleniyor. Ve sizin php artisan storage:link komutunu sunucu konsolunda çalıştırarak bir kısayol oluşturmanız gerekiyor ki insanlar bu dizine ulaşsın. Aksi taktirde laravel public dışındaki dizinlere erişimi engelliyor. Aslında haklı da güvenlik için gerekli bir durum.
Pek siz eğer özel sunucu kullanmıyorsanız yani paylaşımlı hosting kullanmıyorsanız bu kısayol oluşturmayı nasıl yapıcaksınız?
İşte burada devreye laravel’in kendi içinde artisan komutları çalıştırmaya izin verme özelliği giriyor. Siz bir route ve controller oluşturup bu controller içinde istediğiniz komutu çalıştırabiliyorsunuz.
Biz burada şöyle bir yok izliyicez.
- /kurulum şeklinde bir route oluşturucaz.
- KurulumController oluşturucaz ve index adında bir metod ekliyicez. Bu metodu ilk adımda oluşturduğumuz route a bağlıyıcaz.
- Bu Controller dosyamızın içindeki index metodun içerisine Artisan::call(‘storage:link’); komutunu ekliyicez.
- Sayfanın başına use Illuminate\Support\Facades\Artisan; eklemeyi unutmayın ki bu sınıfa ulaşsın.
Bitmiş dosyamız şu şekilde görünücek
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Artisan;
class KurulumController extends Controller
{
function index(){
Artisan::call('storage:link');
}
}
Son olarak tarayıcımıza siteadresi.com/kurulum sayfasını açıcaz. Artık eğer storage kullandısanız o da sitenizin ana dizinine kısayol ile bağlanmış olacaktır.
Örnek Video Anlatım