If you're hosting your Laravel project on shared hosting like Hostinger, using cPanel or hPanel, you may run into an issue where the public/storage link doesn't work as expected.
This typically happens because symlinks are restricted or not supported on many shared hosting environments. As a result, running php artisan storage:link either fails silently or has no effect — leaving your uploaded files inaccessible via the browser.
But don't worry — here's a simple workaround that doesn't require symlinks or SSH access.
Laravel normally creates a symbolic link to expose those files to the public:
public/storage → storage/app/public
The Solution: Change Filesystem Path
To make it work without symlinks, just tell Laravel to use public/storage as the root of your public disk.
Step-by-step:
- Open the
config/filesystems.php
file in your Laravel project. - Find this part:
'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', 'throw' => false, 'report' => false, ],
- Change this line:
'root' => storage_path('app/public'),
to:
'root' => public_path('storage'),
Full updated config:
'public' => [ 'driver' => 'local', 'root' => public_path('storage'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', 'throw' => false, 'report' => false, ],
Now Laravel will save and load files directly from the public/storage folder — no symlink required!
Just make sure the public/storage folder exists and is writable:
mkdir -p public/storage chmod -R 755 public/storage
Top comments (0)