Можете записывать ключи, которые передаются в ссылке, хранить их в БД, при переходе по ссылке проверяется, если ли доступ ко этому ключу, если есть — то для какого товара.
Если всё ОК — скриптом отдаете файл клиенту, а сам файл может лежать где угодно, вы скриптом можете его хоть с ftp переправлять. Только в таком случае нужно использовать легковесный веб-сервер, иначе при большом количестве одновременных скачиваний ему будет туго.
Если развить указанный
yaksa вариант — файл можно не копировать, а делать каждому пользователю симлинки на оригинальный файл с уникальным адресом, по истечению годности симлинк удалять.