根据请求uri使用.htaccess强制视频/ webm mime类型

时间:2011-05-29 16:46:33

标签: apache .htaccess mod-rewrite mime-types webm

我在.htaccess

中有一个重写规则
RewriteRule   (.+?\.fid)/ /$1 [L]

使用请求URI,例如:/123.fid/myfile.webm

如何使用包含上述规则的.htaccess强制mime类型:video/webm

我已尝试过,添加.htaccess文件的TOP但未成功:

AddType video/webm .webm

<FilesMatch  "\.webm$">
  ForceType video/webm
</FilesMatch>

我使用apaches mime_magic模块查找mime类型的.fid文件,但这不适用于webm文件。我假设它是RewriteRule导致文件类型出现问题,我需要以某种方式在请求中查找webm。

如果我这样做:AddType video/webm .fid发送了正确的mime类型 - 但这会破坏存储在.fid中的任何其他文件格式。使用.fid是设计要求,不能改变。

* 修改

我也尝试过:

RewriteCond %{REQUEST_URI} \.webm$
RewriteRule .* - [T=video/webm]

RewriteRule \.webm$ - [T=video/webm]

具有相同的结果。提供的mime类型为text/plain。这可能是mime_magic模块的interfiering吗?

我还尝试添加:DefaultType video/webm。这是目前最接近解决方案的东西,因为mime_magic模块似乎找到了正确的mime类型来发送,但我发现这不是一个特别优雅的解决方案

* Edit2 AddType video/webm .fid正在运行 - 如何根据请求uri有条件地执行AddType?

4 个答案:

答案 0 :(得分:6)

您可以在RewriteRule中使用T-flag:

RewriteRule someRegEx$ - [T=video/webm]

http://httpd.apache.org/docs/current/rewrite/flags.html#flag_t

答案 1 :(得分:6)

当我将以下行添加到.htaccess文件中时,它对我有用:

<IfModule mod_rewrite.c>
  AddType video/ogg .ogv
  AddType video/webm .webm
  AddType video/mp4 .mp4
</IfModule>

答案 2 :(得分:3)

如果您使用脚本(而不是真实文件)发送数据,那么脚本必须发送正确的标头,例如使用PHP(在任何其他输出之前):

header("Content-type: video/webm");

如果是真实文件,您可以使用内容协商(而不是重写)和:

AddType video/webm .fid

修改

不幸的是我不接近apache,但这可能值得一试:

RewriteCond %{REQUEST_URI} \.webm$
RewriteRule (.*) $1 [E=is_webm:true]

Header set Content-Type video/webm env=is_webm

答案 3 :(得分:1)

无法让它在Apache中运行,我放弃了,转而使用nginx。我使用:

让它在nginx中工作
location ~\.webm$ {
  add_header Content-Type video/webm;
  rewrite  (.+?\.fid)/ /$1  break;
}