У меня есть FTP-сервер (vsftpd), на котором много файлов разных типов. Обычно при нажатии на .tar.gz файл в вашем браузере, он начнет его загрузку.
Проблема в том, что пользователь нажимает на .sh файл, файл не загружается, а вместо этого его содержимое отображается в браузере.
Что я должен настроить FTP или веб-сервер, чтобы заставить его загружать файлы .sh?
Редактировать: Во-первых, веб-сервер - это Apache. Однако, как я понял, веб-сервер не мешает запросу, так как "ftp: //"протокол используется вместо"http: //". Возможно, поэтому правила Apache игнорируются (потому что Apache не получает никаких запросов). FTP-сервер напрямую обрабатывает все клиентские запросы.
Учитывая все это. Есть ли способ настроить FTP-сервер для правильной обработки файлов .sh?
В Apache вы можете сделать следующее, чтобы заставить даже самые противные веб-браузеры (я смотрю на вас, IE) загрузить файл:
<FilesMatch *.sh>
ForceType application/octet-stream
Header set Content-Disposition attachment
</FilesMatch>
Это должно быть добавлено либо внутри VirtualHost, либо в каталог внутри VirtualHost.
Какое программное обеспечение веб-сервера вы используете?
Обычно об этом заботятся типы MIME. В зависимости от веб-сервера вам может потребоваться отредактировать соответствующий файл типов MIME (скажем, /etc/mime.types или, для nginx, /etc/nginx/mime.types, хотя это указано в файле / etc / nginx / nginx.conf) и добавьте что-нибудь для расширения .sh.
В Apache есть «mime_magic_module». Если он включен, он определит, что файл является сценарием оболочки, и установит тип MIME на «application / x-shellscript» или «application / x-sh». Если на вашем веб-сервере нет такого автоматического определения, вы можете добавить что-то вроде:
application/x-sh sh
в эквивалентный файл типов MIME.
Если вы это сделаете curl -Iv http://www.example.com/foo.sh
вы увидите заголовок Content-Type:, указывающий, что веб-сервер считает файлом, который он обслуживает.
Если веб-сервер может добавить заголовок HTTP, вы сможете это сделать. Что-то вроде:
Content-Disposition = attachemnt; filename = "abcd.sh"
Если браузер передает FTP напрямую FTP-серверу, настраивать особо нечего.