2009-09-15 17 views
3

我有一个mp3文件的目录希望能够为他们提供内联服务或给用户一个基于请求URI下载的选项。mod_rewrite帮助改变基于URI的内容处置

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

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

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

回答

1

使用mod_rewrite,您只能更改一些特定的标题字段,但其中内容处置标题字段不属于。你只能改变内容类型头字段:

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> 
+0

谢谢。我一直试图这样做失败: SetEnvIF Request_URI“^/media/download”force-download = 1 标题集Content-Disposition attachment env = force-download – syncopated 2009-09-18 16:10:26

4

IfDefine将检查在启动时设置变量的Apache,所以这将无法正常工作。一个有效的配置将是:

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

另外更改Content-Type不是强制下载所必需的。