我们有一个从服务器下载文件的应用程序。下载后,它需要保存它,因为它使用从响应标头中提交的文件名参数。
当我使用标准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将文件名动态地分配到标题。 我谷歌它寻找它但仍然没有解决方案。
有什么建议吗?
答案 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
。