10

如果 URL 指向具有 .pln 或 .psa 扩展名的文件,如何让我的 Apache 2 服务器强制浏览器打开文件传输对话框?

我有一个简单的 LAMP 服务器,带有 CentOS 5、Apache 2、MYSQL 5、PHP 5,最近构建了 CentOS 5.2 i386 安装 CD。我的 Web 应用程序生成要下载并导入自定义应用程序的文件。文件扩展名为 .psa 和 .pln。如何让我的服务器强制浏览器打开文件传输对话框?如果我将浏览器指向 Apache 2 服务器上的 .psa 或 .pln 文件,该文件的内容将在弹出窗口中显示为简单文本。我想要一个文件传输对话。

我正在开发的网络应用程序部署在另一个网络服务器上,并根据需要处理 .pln 和 .psa 文件。我无法比较服务器配置文件,因为我没有对工作服务器的管理员访问权限。

如何更改服务器的行为?这是否需要对我的网络应用程序代码进行代码更改(例如发送显式标头)?如果是这样,为什么它对其他服务器起作用?是否可以通过配置服务器的默认行为来避免代码更改?

任何帮助,将不胜感激。

4

5 回答 5

6

您应该能够使用 FilesMatch 指令来添加必要的标头。

<FilesMatch "\.(?i:pin)$">
  Header set Content-Disposition attachment
</FilesMatch>
于 2008-12-29T18:06:32.307 回答
0

强迫浏览器做某事总是一个棘手的提议,因为浏览器可以忽略你并做它喜欢做的事情:)

也就是说,如果“Content-type”标头设置为“application/octet-stream”,大多数浏览器都会通过“另存为”对话框提示用户。要么编写一个简单的包装 cgi 来提供具有正确标题的请求文件,要么使用 Apache2 的 mime-types(查看 config 目录。)

希望这会有所帮助,快乐的黑客(以及快乐的圣诞节、新年或任何你可能庆祝的事情)

米莎

于 2008-12-29T18:06:36.440 回答
0

啊,不知道那个头白马,这可能是一个更好的方法,因为它允许你保留原始的 MIME 类型,必须记住那个。

于 2008-12-29T18:08:25.577 回答
0

我尝试了几个没有明显效果的配置更改。

  1. 我将以下行添加到我的 /etc/httpd/conf/httpd.conf 文件中:

AddType 应用程序/八位字节流 .pln .psa

我重新启动了 Apache 服务器,但没有任何效果。

  1. 我在 /etc/httpd/conf/httpd.conf 文件中添加了以下行: ForceType application/octet-stream Header set Content-Disposition attachment ForceType application/octet-stream Header set Content-Disposition attachment 我重新启动了 Apache 服务器并且它没有效果。
于 2008-12-29T18:13:54.130 回答
0

如果您有 Firefox(如果没有,为什么不呢?)安装 Chris Pedericks Developer Toolbar,并检查标题是否设置正确。如果是这样,可能是浏览器的问题。正如我所说,您不能确定任何给定的浏览器都会“正确”解释响应标头。无论如何,我们在这里谈论的是什么浏览器?

如果标头设置不正确,您可能需要重新检查 httpd.conf 文件。可能您添加的指令不在正确的部分?(例如在错误的 <Location > 指令下)

于 2008-12-29T18:24:09.370 回答