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

发布于 2025-01-06 03:29:05 字数 490 浏览 2 评论 0原文

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

当我使用标准 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 将文件名动态解析到标头。 我用谷歌搜索了一下,但仍然没有解决方案。

有什么建议吗?

we have an application which downloads the files from the server. After the download them it needs to save it, for that it uses the filename paramter which is comming from the responce header.

When i'm using the standart PHP download.php?id=downloadID i can set the headers with no problem.

The task now is that on the client server they do not have any php available,
i need to set the filename inside of the responce header.

here is the htaccess what i have:

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

And i have no idea how to parce the file name dynamicaly to the header using htaccess.
I've google it looked for it but still no solution.

Any suggestions?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

甜心小果奶 2025-01-13 03:29:05

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

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 安装会在 env 变量前加上 REDIRECT_

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

I have no idea if it works, but this would be my first attempt.

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

EDIT Seems some apache installs prefix the env variable with REDIRECT_

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

Above code doesn't work out of the box. In my case, I needed another internal redirect.

But why would you need to set the filename in the header if the request URL contains the filename too? All browsers will save the file with under the name in the URL. So going to /path/test.pdf will result in browsers suggesting the filename test.pdf.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文