Я также согласен с Dr.Molle в том, что вы должны переименовывать файлы и отправлять их динамически.
Но вместо того, чтобы отправлять их через скрипт, который займет гораздо больше памяти, чем необходимо, я настоятельно рекомендую использовать mod_xsendfile для Apache.
С помощью mod_xsendfile вместо вывода файла через PHP вы можете просто отправить заголовки XSendFile:
<?php
header('Content-Disposition: attachment;filename=originalname.txt');
header('X-Sendfile: /path/to/file.txt');
?>
Таким образом, вы можете хранить все файлы вне корневого каталога и, следовательно, совершенно недоступны для внешнего мира. Вам вообще не придется беспокоиться о .htaccess.
Если ваш хост позволяет вам устанавливать новые модули Apache, вам понадобится установить apxs (вероятно, так и будет). Если он не установлен, вам нужно пересобрать Apache с включенным apxs. По моему опыту, если вы можете управлять этим, оно того стоит. XSendFile экономит так много хлопот.