【问题标题】:Setting a filename inside the header with htaccess使用 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 将文件名动态分配到标题中。 我用谷歌搜索了它,但仍然没有解决方案。

有什么建议吗?

【问题讨论】:

    标签: apache .htaccess ubuntu server-configuration


    【解决方案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>
    

    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_FILENAME}e" env=REDIRECT_FILENAME
    

    上面的代码不能开箱即用。就我而言,我需要另一个内部重定向。

    但是,如果请求 URL 也包含文件名,为什么还需要在标头中设置文件名呢?所有浏览器都会以 URL 中的名称保存文件。所以转到/path/test.pdf 将导致浏览器提示文件名test.pdf

    【讨论】:

    • filename=FILE_NAME.pdf 的实际结果是FILE_NAME.pdffilename=%{FILENAME}e 的结果是null
    • 我知道当你直接用文件名调用服务器时,它会得到一个名字......只是当你在项目中有runaway freelancer时你需要做一些部分的项目。关于代码我无法管理它工作(因为我不明白你说它对你有用)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    • 2011-01-09
    • 1970-01-01
    相关资源
    最近更新 更多