I also agree with Dr.Molle that you should rename the files and send them dynamically.
But instead of sending them via a script, which will take up much more memory than necessary, I highly recommend using mod_xsendfile for Apache.
With mod_xsendfile, instead of outputting the file through PHP, you can simply send the XSendFile headers:
<?php
header('Content-Disposition: attachment;filename=originalname.txt');
header('X-Sendfile: /path/to/file.txt');
?>
This way, you can keep all the files OUTSIDE the web directory root and therefore completely inaccessible to the outside world. You won't have to worry about .htaccess at all.
If your host allows you to install new Apache modules, you'll need apxs installed (it probably will be). If it's not installed, you'll need to rebuild Apache with apxs enabled. In my experience, if you can manage it, it's worth it. XSendFile saves SO much trouble.