使用 htaccess 在标头内设置文件名
Posted
技术标签:
【中文标题】使用 htaccess 在标头内设置文件名【英文标题】:Setting a filename inside the header with htaccess 【发布时间】:2012-03-07 17:20:28 【问题描述】:我们有一个从服务器下载文件的应用程序。下载后需要保存,因为它使用来自响应头的文件名参数。
当我使用标准 php download.php?id=downloadID
时,我可以毫无问题地设置标题。
现在的任务是在客户端服务器上他们没有任何可用的 php, 我需要在响应头中设置文件名。
这是我所拥有的 htaccess:
<FilesMatch "\.(?i:pdf)$">
Header set Content-Type: application/octet-stream
Header set Content-Disposition: "attachment; filename=FILE_NAME.pdf"
</FilesMatch>
而且我不知道如何使用 htaccess 将文件名动态分配到标题中。 我用谷歌搜索了它,但仍然没有解决方案。
有什么建议吗?
【问题讨论】:
【参考方案1】:我不知道它是否有效,但这是我的第一次尝试。
RewriteRule [^/]+\.pdf$ - [E=FILENAME:$0]
<FilesMatch "\.(?i:pdf)$">
Header set Content-Type application/octet-stream
Header set Content-Disposition "attachment; filename=%FILENAMEe"
</FilesMatch>
EDIT 似乎一些 apache 安装前缀为 env 变量 REDIRECT_
RewriteRule [^/]+\.pdf$ - [E=FILENAME:$0]
Header set Content-Type application/octet-stream env=REDIRECT_FILENAME
Header set Content-Disposition "attachment; filename=%REDIRECT_FILENAMEe" env=REDIRECT_FILENAME
上面的代码不能开箱即用。就我而言,我需要另一个内部重定向。
但是,如果请求 URL 也包含文件名,为什么还需要在标头中设置文件名呢?所有浏览器都会以 URL 中的名称保存文件。所以转到/path/test.pdf
将导致浏览器提示文件名test.pdf
。
【讨论】:
filename=FILE_NAME.pdf
的实际结果是FILE_NAME.pdf
,filename=%FILENAMEe
的结果是null
我知道当你直接用文件名调用服务器时,它会得到一个名字......只是当你在项目中有runaway freelancer
时你需要做一些部分的项目。关于代码我无法管理它工作(因为我不明白你说它对你有用)。以上是关于使用 htaccess 在标头内设置文件名的主要内容,如果未能解决你的问题,请参考以下文章
如何仅在 HTTPS 上从 .htaccess 设置 HSTS 标头 [关闭]
apache_conf WordPress .htaccess配置文件。允许强制SSL,隐藏wp-config.php,标头ETag,GZIP压缩和过期缓存。