создаем файл getfile.php:
<?php
session_start();
if($_SESSION['authorization']!="authorization_executed") { @header('Location: http://сайт.ру'); exit; }
switch($_GET['file']){
case 1: $filename="http://сайт.ру/file1.zip";break;
case 2: $filename="http://сайт.ру/file2.zip";break;
case 3: $filename="http://сайт.ру/file3.zip";break;
default : $filename="File not found";
}
function file_force_download($file) {
$head_size = @get_headers($file);
if(strpos($head_size[0], '200')) {
if (ob_get_level()) {
ob_end_clean();
}
$size = str_replace("Content-Length: ", "", $head_size[6]);
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . $size);
ob_clean();
flush();
readfile($file);
exit;
} else {
@header('Location: http://сайт.ру'); exit;
}
}
file_force_download($filename);
в файле index.php (например) стартуем сессию, которую в дальнейшем будем проверять в начале getfile.php:
session_start(); $_SESSION['authorization']="authorization_executed";
и ссылки на скачивание делаем такого вида: /getfile.php?file=2 + так же модно переделать под свои нужды и вместо списка файлов указывать только их имена, а сами файлы положить где-то на сервере (предварительно в скрипте добавив информацию о пути от корня)

