【问题标题】:Selectively force file download with Apache based on URL parameter基于 URL 参数有选择地强制使用 Apache 下载文件
【发布时间】:2013-04-12 21:26:49
【问题描述】:

我有一个 Apache 2.2 正在运行,我强制使用这个 .htaccess sn-p 下载一些文件:

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

所有受影响的文件都在一个子文件夹中,所以到目前为止效果很好。不幸的是,现在事实证明这有时会导致问题(例如,jplayer 不喜欢那样)。我现在需要有选择地使用默认行为,或强制下载这些文件。

我想必须以某种方式使用 URL 参数选择行为,以便

http://example.com/files/music.mp3

会导致正常行为(即可以播放 MP3 的浏览器会这样做,而 jplayer 不会抱怨),并且

http://example.com/files/music.mp3?download=1

会强制下载。但是,我不知道如何根据参数的存在有选择地使用 ForceType。我知道使用一些 PHP 很容易实现,但如果可能的话,我想避免这种情况。

感谢您的帮助!

【问题讨论】:

    标签: apache .htaccess download url-parameters


    【解决方案1】:

    这里已经回答了一个类似的问题:

    https://stackoverflow.com/a/7446204/2291963

    读取 QueryString,并将其设置为您决定使用的任何文件扩展名。

    【讨论】:

      【解决方案2】:

      一个相当有效的方法是创建另一个文件夹,称为 /download/,其中包含您的 htaccess sn-p,并使用此添加将所有 /download/ 文件请求重定向到 /file/ 文件夹在同一个.htaccess 中重写规则

      RewriteEngine on
      RewriteRule ^(.*)$ files/$1 [L] 
      

      出于分析/日志目的,您可以使用良好的语义单独识别下载,并通常调用您的 /files/ 用于 html 嵌入使用,而 /files/ 请求不会有任何 .htaccess 性能下降,这不会受到影响/download/ 文件夹中的 .htaccess。

      【讨论】:

      • 太棒了,谢谢!这更好,因为没有查询字符串的 URL 看起来更好。我什至没有想过为此使用重写引擎。
      猜你喜欢
      • 2022-07-07
      • 1970-01-01
      • 2019-12-03
      • 1970-01-01
      • 2022-08-04
      • 1970-01-01
      • 1970-01-01
      • 2021-11-06
      • 2023-03-28
      相关资源
      最近更新 更多