如何在文件中的Apache中发送Content-Disposition标头?


8

我有一个文本文件目录,我正在用Apache 2提供这些文件。通常,当我(或任何用户)访问文件时,他们会在浏览器中看到它们。我想“强制” * Web浏览器弹出“另存为”对话框。我知道这可能与Content-Disposition标头(更多信息)有关。

有没有办法为每个文件打开它?

理想情况下,我想要这样的东西:

<Directory textfiles>
   AutoAddContentDispositionHeaders On
</Directory>

然后,Apache将设置正确的内容处理标头,包括使用相同的文件名。

使用apache Header指令可能会发生这种情况。

奖励积分(如果包括在debian中的apache中包含在内)。

我可以做一个简单的PHP包装脚本,该脚本接受一个filename参数,进行调用header(...),然后打印该文件,但随后我必须对输入的validatedate等。这是我要避免的工作。


*我知道当涉及到网络时,您实际上无法强制执行任何操作

Answers:


11

我发现这可以满足我的要求:

<Location /textfiles>
    SetEnvIf Request_URI "^.*/([^/]*)$" FILENAME=$1
    Header set "Content-disposition" "attachment; filename=%{FILENAME}e"
    UnsetEnv FILENAME
</Location>

文件名末尾的“ e”是什么?我看到没有它是行不通的,但是我不明白它是做什么的。
Mark E. Haase 2013年

它只是意味着“评选的环境变量的内容FILENAME”(mod_headers中看到的文档:httpd.apache.org/docs/current/mod/mod_headers.html
啤酒

1

mod_headers 应该是您要寻找的:

<IfModule mod_headers.c> 
  <Location ~ ".*/textfiles/.*"> 
    Header set Content-Disposition attachment
  </Location>
</IfModule>

一个好的开始,但我也希望在其中输入文件名,以便它弹出(相同)文件名。但是,我找到了一个类似的解决方案
罗里(Rory)2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.