Все очень просто, через скрипт
Делается папка вне корня сайта, пых туда все равно может ходить, делаем скрипт, который будет нам забирать эти файлы
Пример
$dir = '/var/www/loc/files/';
$file_id = $_GET['file'] ?? null;
if (file_exists($file = $dir . $file_id) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
readfile($file);
exit;
} else {
die('файла нет');
}
Ссылка будет script.php?file=image.png
Плюсы от этого
Можно ограничить доступ, например только кто зарегистрировался, ограничить скорость загрузки, прочие штуки, счётчик скачивании