【问题标题】:Forcing a download using <filesMatch> in htaccess在 htaccess 中使用 <filesMatch> 强制下载
【发布时间】:2013-01-01 13:51:17
【问题描述】:

我正在尝试强制下载一个文件夹的所有文件。

页面上的链接是这样的

<a href="http://example.com/uploads/documents/file.pdf">Click to download</a>

我的 .htaccess 中有这个 sn-p

<filesMatch ".*uploads/documents.*">
    ForceType application/octet-stream
    Header set Content-Disposition attachment
</filesMatch>

我已经知道标记内的 2 行有效,因为当我将 .htaccess 直接放在我想使用以下代码强制下载的文件夹中时它有效:

<Files *.*>
    ForceType application/octet-stream
    Header set Content-Disposition attachment
</Files>

关于 filesMatch 标签,我似乎有些不明白的地方。

【问题讨论】:

  • ftp 根目录?你的意思是http? htaccess 对 ftp 没有任何作用。您还拼错了“aplication”(注意第二个 i)
  • 请不要使用application/octet-stream强制下载。这是对 HTTP 的所有优点和真实性的滥用。
  • 强制下载文档而不是显示文档的更好方法是什么?

标签: .htaccess


【解决方案1】:

搜索更多信息发现此代码:

<FilesMatch "\.(mov|mp3|jpg|pdf|mp4|avi|wmv)$">
   ForceType application/octet-stream
   Header set Content-Disposition attachment
</FilesMatch>

为我工作。

【讨论】:

  • 对于不确定在哪里添加此 sn-p 的任何人。我将此代码添加到一个名为 .httaccess 的文件中,该文件与要下载的文件位于同一目录中。
【解决方案2】:

请分别查看FilesMatchFiles 的文档。它明确指出

本节中给出的指令将应用于任何对象 具有与指定匹配的基本名称(文件名的最后一个组成部分) 文件名。

这意味着在您的示例中它与file.pdf 匹配。您的第二个示例*.* 匹配file.pdf,但您的第一个示例.*uploads/documents.* 不匹配。它实际上永远无法匹配,因为它包含一个斜杠,用作目录分隔符。

如果你可以编辑 apache 配置

您应该在Location 指令中包含&lt;Files *.*&gt;&lt;Files *.pdf&gt;(取决于您要强制下载的内容):

<Location "/uploads/documents/">
    <Files *.*>
        ForceType application/octet-stream
        Header set Content-Disposition attachment
    </Files>
</Location>

如果您无法编辑 apache 配置

不幸的是,.htaccess 文件中不允许使用 Location 指令。只需在您的 /uploads/documents/ 目录中创建一个 .htaccess。

【讨论】:

  • 感谢您的解释。我看过文档,但对我来说似乎是中文的。真的没有办法通过htaccess文件夹来定位文件夹吗?
  • 我结束了使用 PHP 设置正确的标头来强制下载,因为我无法在文件夹中放置 .htaccess,但我终于明白了 标签在 htaccess 中的工作原理
  • 我收到错误消息 - 不能出现在 部分中 - 不要再认为可行了。
  • 当你强制影响所有文件时,&lt;Files&gt; 指令不是必需的。 ForceTypeHeader 就足够了。但我更喜欢 &lt;Files&gt; 指令,因为它在语义上更具可读性。
【解决方案3】:

如果你不在文件名中使用-,这段代码就完美了!

例如对于name-1.mp3,改为name1.mp3

<FilesMatch "\.(mp3|avi)$" >
    ForceType application/octet-stream
    Header add Content-Disposition "attachment"
</FilesMatch>

清除浏览器并检查。

【讨论】:

    猜你喜欢
    • 2012-02-23
    • 2014-12-27
    • 2016-01-16
    • 2011-08-12
    • 2014-11-19
    • 2011-05-12
    • 1970-01-01
    • 2015-05-08
    相关资源
    最近更新 更多