Почему бы просто не сделать ссылки динамическими и косвенными, например:
на странице X: (статично)
<a href="Y">SuperNeat Program</a>
на странице Y: (динамически генерируется)
Click here to download
<a href="Z.php?timestamp={timestamp}&counter={counter}&hash={hash}">
SuperNeat Program</a>
и замените временную метку с текущим временем в мс с 1970 года, счетчик = счетчик, который вы увеличиваете один раз за загрузку, хэш = MD5-хэш конкатенации (отметка времени, счетчик, секретная соль), где секретная соль = любой любимый код, который вы храните секрет.
Затем на странице Z.php вы просто пересчитываете хэш из счетчика и метки времени в строке запроса, проверяете, соответствует ли он хешу в строке запроса, и что отметка времени является последней (например, из предыдущих 30 минут или 60 минут или что-то). Если это так, тогда подайте рассматриваемый файл. Если это не так, выкиньте сообщение об ошибке. Это дает кому-то только короткий промежуток времени для прямой ссылки на ваш файл. Если вы этого даже не хотите, то следите за значениями счетчиков, полученными в строке запроса Z.php, и не принимайте их более одного раза.