我现在正在使用源拉 CDN 快速分发文件。它从源拉取文件,包括文件的“类型”(目前为下载/八位字节流)并将其输出到客户端。
为此,我有以下网络服务器结构:
http://www.server.com/files/code/file.mp4
在“文件”目录中,我放置了一个 .htaccess 文件来强制下载(否则它只会开始流式传输视频文件):
<Files *.*>
ForceType application/octet-stream
Header set Content-Disposition attachment
</Files>
现在,我想允许从同一文件夹下载文件和流式传输文件。由于您可以使用相同的 .htaccess 文件创建文件夹的“别名”,因此我想创建以下内容:
http://www.server.com/files/code/file.mp4 -> download
http://www.server.com/streams/code/file.mp4 -> "stream" exactly the same file
如何才能做到这一点?
答案1
ForceType application/octet-stream
没有必要覆盖正确的 Content-Type
以强制下载。Content-Disposition
在所有现代浏览器中设置适当的标头就足够了。
您可以使用相同的 .htaccess 文件创建文件夹的“别名”
是的,有点。不过您无法.htaccess
在/files
目录中使用相同的功能 - 如果您暗示的是这个的话?
尝试以下操作...删除目录.htaccess
中的文件/files
,并将以下指令添加到.htaccess
文档根目录(或适当的子目录)中的文件中。如果您有现有指令,这些指令可能需要放在顶部附近 - 顺序可能很重要。
RewriteEngine On
# Force download all direct requests to the ./files directory
RewriteCond %{REDIRECT_STATUS} ^$
RewriteRule ^files/ - [E=FORCE_DOWNLOAD:1,T=application/octet-stream]
# Internally rewrite requests for ./streams to ./files
RewriteRule ^streams/(.+) files/$1 [L]
# Only set the Content-Disposition header when forcing a download
Header set Content-Disposition attachment env=FORCE_DOWNLOAD
Content-Type
强制下载时,上述代码仍会覆盖(即T=application/octet-stream
上的标志RewriteRule
)。尽管我认为应该避免这种情况。
指令RewriteCond
检查THE_REQUEST
REDIRECT_STATUS
防止对“虚拟”目录的请求./streams
也被下载。它确保只./files
下载对目录的“直接”请求。