使用.htaccess“文件夹”规则来强制不同的内容处置类型?

使用.htaccess“文件夹”规则来强制不同的内容处置类型?

我现在正在使用源拉 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下载对目录的“直接”请求。

相关内容