如何配置 Web/FTP 服务器以便它下载 .sh 文件而不是显示其内容

如何配置 Web/FTP 服务器以便它下载 .sh 文件而不是显示其内容

我有一个 FTP 服务器 (vsftpd),其中有许多不同类型的文件。通常当您单击压缩文件文件在您的浏览器中,它就会开始下载。

问题是当用户点击.sh文件,则不会下载该文件,而是将其内容显示在浏览器中。

我应该如何配置 FTP 或 Web 服务器来强制其下载 .sh 文件?

编辑:首先,Web 服务器是 Apache。但是,据我了解,Web 服务器不会干扰请求,因为“ftp://“ 协议被用来代替 “http://“。也许,这就是 Apache 的规则被忽略的原因(因为 Apache 没有收到任何请求)。FTP 服务器直接处理所有客户端请求。

考虑到所有这些。有没有办法配置 FTP 服务器以正确处理 .sh 文件?

答案1

在 Apache 中,您可以执行以下操作来强制最不情愿的 Web 浏览器(我正在看你,IE)下载文件:

<FilesMatch *.sh>
  ForceType application/octet-stream
  Header set Content-Disposition attachment
</FilesMatch>

这应该添加到 VirtualHost 中,或者 VirtualHost 内的目录中。

答案2

您正在使用什么网络服务器软件?

这通常由 MIME 类型处理。根据 Web 服务器的不同,您可能需要编辑相关的 MIME 类型文件(例如,/etc/mime.types,或者对于 nginx,/etc/nginx/mime.types,尽管该文件在 /etc/nginx/nginx.conf 文件中指定)并添加一些 .sh 扩展名的内容。

在 Apache 上,有一个“mime_magic_module”。如果启用了该模块,它将检测文件是否为 shell 脚本,并将 MIME 类型设置为“application/x-shellscript”或“application/x-sh”。如果您的 Web 服务器没有这种自动检测功能,您可以添加类似以下内容的内容:

application/x-sh               sh

转换为等效的 MIME 类型文件。

如果你这样做,curl -Iv http://www.example.com/foo.sh你将会看到 Content-Type:标头指示 Web 服务器认为它所服务的文件是什么。

答案3

如果 Web 服务器可以添加 HTTP 标头,那么您应该能够实现这一点。例如:

内容处置=attachemnt;文件名=“abcd.sh”

如果浏览器直接通过 FTP 与 FTP 服务器通信,则无需进行太多调整。

相关内容