mod_rewrite有助于根据URI更改Content-disposition

时间:2009-09-15 17:35:52

标签: apache .htaccess mod-rewrite

我有一个mp3文件目录,希望能够内联服务或根据请求URI为用户提供下载选项。

/media/file1.mp3 - 在这种情况下,我只想提供文件并让浏览器播放它。

/media/download/file1.mp3 - 在这种情况下,我想让用户轻松下载文件。

我已经能够使用mod_rewrite和php(使用header()和readfile()函数)完成此操作但是我宁愿用mod_rewrite,mod_header等完成所有操作。

2 个答案:

答案 0 :(得分:5)

IfDefine 将检查在启动Apache时设置的变量,这样就无法工作了。有效的配置是:

SetEnvIf Request_URI ^/media/download/ force-download
Header set Content-Disposition attachment env=force-download

也无需更改内容类型以强制下载。

答案 1 :(得分:2)

使用mod_rewrite,您只能更改某些特定的标题字段,但 Content-Disposition 标题字段不属于该字段。您只能更改 Content-Type 标题字段:

RewriteRule ^media/[^/]+\.mp3$ - [L,T=audio/mpeg]
RewriteRule ^media/download/[^/]+$ - [L,T=application/octet-stream]

如果您想使用mod_headers + mod_setenvif解决方案:

SetEnvIf Request_URI ^/media/download/ force-download

<IfDefine force-download>
    Header set Content-Disposition attachment
    Header set Content-Type application/octet-stream
</IfDefine>