Решил поделиться с интернетом своими изысканиями
Задача: подменить имя файла при скачивании с сервера
На сайте имеется загрузчик файлов, который для удобства хранения переменовывает файлы в случайный набор букв и цифр, оставляя родным только расширение файла, типа вот так: 44srCfNgQPwWw60Wg3m5.doc
Так же в БД хранится заодно настоящее имя файла (которое можно изменять через админку). Файлы лежат в директории /files/2012/01/44srCfNgQPwWw60Wg3m5.doc
Просто и понятно.
Понятное дело, чтобы лишний раз не грузить сервер (без отдачи файла через php) мы будем отдавать файл напрямую (те тупо дадим ссылку на него), но в диалоге сохранения файла браузер выдаст сохранить как «44srCfNgQPwWw60Wg3m5.doc». Это некрасиво. Умные люди придумали такой заголовок: Content-Disposition: attachment; filename=»downloaded.pdf». Т.е. если бы мы отдавали файл через php, то мы бы просто обратились к нему через readfile и перед выплевыванием в браузер добавили бы в том числе такой заголовок и наш файл абракадабра имел бы человеческий вид.
А теперь я расскажу как это сделать средствами apache2 (уверен, нечто подобное можно сделать и для nginx, этим я озадачусь чуть позже, посколько nginx на тестовом сервере установлено не было на момент изыскания). Единственный минус данного способа в том, что мы должны еще передавать GET переменную name к скачиваемому файлу с нужным именем файла
Читать далее mod rewrite и все-все-все