My app's symbolic links between storage/app/public and public/storage have been created as per usual using php artisan storage:link, however, on production they're not working as intended.
Any uploaded file, for example, saved to /storage/app/public/uploads 404s in the browser on production at the address BASE_URL/uploads/FILENAME, whereas locally (running Valet) this works fine.
Again, adding /storage/ to the endpoint resolves the file as intended. What am I doing wrong here?
Well, it creates a symlink from public/storage to storage/app/public, so you always need the storage prefix if you try to access the file directly using the path.
If you want a different path, you need to create a different symlink.
I've resolved my issue, sorry for the confusion. By setting the root storage path to app/public for both the local and public disks, the environments are now mirroring each other's behaviour. Yes, of course it makes sense that the storage/ prefix should exist on all public files, my bad!