When I worked on laravel local development server php artisan storage:link
works fine for me. But when I transfer my site to production server then I saw my public
In case anyone is looking for another flexible solution using php:
Route::get('/link', function () {
$target = '/home/public_html/storage/app/public';
$shortcut = '/home/public_html/public/storage';
symlink($target, $shortcut);
});
And make any required change to the $target variable and the $shortcut upon your files structure.
You can use the above code inside that web route or inside any other function.