Hola.
Imagínate que tienes dos archivos: info.php?id=10 muestra la información del archivo e incluye el enlace de descarga, y descargar.php?id=10 devuelve el archivo pasado como parámetro. Lo que tu necesitas es que para que descargar.php devuelva el archivo, el usuario debió pasar por info.php. ¿Cómo comprobar eso? Pues info.php puede enviar una cookie al navegador metiendo en ella por ejemplo la id del archivo, o puede almacenar en una base de datos la IP del usuario que ha visitado la página junto con la id del archivo. Después, en descargar.php, debe comprobar si el valor de la cookie coincide con la id del archivo a descargar, o si existe esa IP asociada a esa id (que indicaría que ha visitado la página de antes). Si todo está ok, envía las cabeceras http que fuerzan la descarga y envían el archivo (más info sobre esto último en por ejemplo
www.javierav.com/archives/14/forzar-descarga-php). Si no está ok, es que previamente no ha accedido a la página de información, por lo que redireccionas a esa página.
Después ya es cuestión de gusto y técnica el usar url "bonitas" o no.
Saludos.