我在.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?
答案 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;
}