可以使用 .htaccess 和特定的 GET 请求(Dropbox 样式)强制下载吗?
Posted
技术标签:
【中文标题】可以使用 .htaccess 和特定的 GET 请求(Dropbox 样式)强制下载吗?【英文标题】:It's possible to force download with .htaccess and a specific GET request (Dropbox style)? 【发布时间】:2012-04-03 08:22:52 【问题描述】:我想知道 .htaccess
是否可以像 Dropbox 那样仅在存在特定 GET 变量时强制文件下载。
例子:
http://www.domain.com/file.mp4
服务器只提供文件,而:
http://www.domain.com/file.mp4?dl
强制浏览器下载文件。
PS:在我的情况下,将php
与readfile()
一起使用不是一个可行的选择。谢谢。
【问题讨论】:
你可以检查\?dl$
然后添加额外的标题吗?
【参考方案1】:
FilesMatch 的模式与查询字符串不匹配,只有文件名正确。
但是,您可以使用 mod_rewrite 模块、%QUERY_STRING
变量和 T flag:
RewriteCond %QUERY_STRING dl
RewriteRule .*\.mp4 - [T=application/octet-stream]
或者,如果你有 Apache > 2.3(我认为),你可以使用If directive,它更干净:
<FilesMatch "filepattern.mp4">
<If "%QUERY_STRING =~ /dl/">
ForceType application/octet-stream
Header set Content-Disposition attachment
</If>
</FilesMatch>
第一个解决方案已更新。
【讨论】:
嗨!这也应该有效吗? RewriteCond %QUERY_STRING dl RewriteRule .*\.mp4 - [T=application/octet-stream] RewriteCond %QUERY_STRING dl RewriteRule .*\.jpg - [T=application/octet-stream] @PJunior 是的,当然,为什么它不起作用?但是您也可以通过将正则表达式组合成.*\.(jpg)|(mp4)
之类的内容,在单个规则中执行此操作。此外,您可能希望更严格地测试查询字符串(就目前而言,它只是检查查询字符串是否包含子字符串“dl”,这并不总是好的)。【参考方案2】:
我对我的项目有非常相似的要求。这个问题实际上给了我使用类似于DropBox handles download links 的查询参数的想法。我将使用像 DropBox 这样更长的“dl=1”参数,因此它不太可能出现在正常的 URL 中。使用 Apache 的“if 指令”是一个好主意,但不幸的是我使用的是 Apache 2.2,所以它不可用。我考虑使用 application/octet-stream Content-Type 但后来我看到了另一个不喜欢这个想法的Stack Overflow thread。所以最后我看到了BlogSpot Article,它建议在 RewriteRule 中设置一个环境变量并在 Header Command 中引用相同的变量。 .htaccess 代码运行良好并解决了问题。感谢此线程上的每个人以及 BlogSpot 家伙的好建议。我的代码示例如下:
# Required Modules are:
# 1) mod_rewrite.c
# 2) mod_headers.c
RewriteEngine On
RewriteCond %QUERY_STRING ^dl=1
RewriteRule .* - [E=DOWNLOAD_FILE:1]
Header set Content-Disposition "attachment" env=DOWNLOAD_FILE
【讨论】:
【参考方案3】:作为替代方案,您可以在标签上添加参数并强制浏览器打开“下载”/“另存为”提示。似乎更容易。
<a href="file.mp3" download >Download File</a>
【讨论】:
谢谢,从未听说过download
属性。这是一个不错的前端伴侣。【参考方案4】:
试试这个:
<FilesMatch "\?dl$">
ForceType application/octet-stream
Header set Content-Disposition attachment
</FilesMatch>
【讨论】:
以上是关于可以使用 .htaccess 和特定的 GET 请求(Dropbox 样式)强制下载吗?的主要内容,如果未能解决你的问题,请参考以下文章