使用htaccess在标题内设置文件名

时间:2012-02-16 09:59:29

标签: apache .htaccess ubuntu server-configuration

我们有一个从服务器下载文件的应用程序。下载后,它需要保存它,因为它使用从响应标头中提交的文件名参数。

当我使用标准PHP download.php?id=downloadID时,我可以设置标题没有问题。

现在的任务是在客户端服务器上他们没有任何可用的PHP, 我需要在responce标头内设置文件名。

这是我拥有的htaccess:

<FilesMatch "\.(?i:pdf)$">
    Header set Content-Type: application/octet-stream
    Header set Content-Disposition: "attachment; filename=FILE_NAME.pdf"
</FilesMatch>

我不知道如何使用htaccess将文件名动态地分配到标题。 我谷歌它寻找它但仍然没有解决方案。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我不知道它是否有效,但这是我的第一次尝试。

RewriteRule [^/]+\.pdf$ - [E=FILENAME:$0]
<FilesMatch "\.(?i:pdf)$">
    Header set Content-Type application/octet-stream
    Header set Content-Disposition "attachment; filename=%{FILENAME}e" 
</FilesMatch>

编辑似乎某些apache安装了带有REDIRECT_的env变量的前缀

RewriteRule [^/]+\.pdf$ - [E=FILENAME:$0]
Header set Content-Type application/octet-stream env=REDIRECT_FILENAME
Header set Content-Disposition "attachment; filename=%{REDIRECT_FILENAME}e" env=REDIRECT_FILENAME

以上代码无法开箱即用。在我的情况下,我需要另一个内部重定向。

但是,如果请求URL也包含文件名,为什么还需要在标题中设置文件名?所有浏览器都会使用URL中的名称保存文件。因此转到/path/test.pdf会导致浏览器建议使用文件名test.pdf