日常网站托管 TXT 文本或 BAT 脚本时,常会遇到一个问题:浏览器访问文件时直接打开(显示源码),而非弹出下载对话框核心原因是:浏览器根据 Content-Type 响应头判断 “打开” 或 “下载”,默认 TXT/BAT 为文本类型(text/plain),会直接解析而不是下载
解决方法
方法一 Apache/Nginx 配置
如果文件托管在自己的 Apache 或 Nginx 服务器,直接通过配置文件修改响应头,无需额外脚本。
1. Apache 服务器
进入网站根目录,找到 .htaccess 文件(无则新建);
添加以下代码(匹配所有 TXT/BAT 文件):
# 强制 TXT/BAT 文件下载
<FilesMatch "\.(txt|bat)$">
Header set Content-Type "application/octet-stream"
Header set Content-Disposition "attachment; filename*=UTF-8''%{REQUEST_FILENAME}e"
</FilesMatch>3.保存后重启 Apache(systemctl restart apache2)
2. Nginx 服务器
打开网站配置文件(如 /etc/nginx/sites-available/your-site.conf);
在 server 块中添加:
# 匹配 TXT/BAT 文件,强制下载
location ~* \.(txt|bat)$ {
add_header Content-Type application/octet-stream;
add_header Content-Disposition "attachment; filename=$request_filename";
}重启 Nginx(nginx -s reload)
方法二 在CDN中设置
上面提到了会直接解析而不是下载,核心原因是:浏览器根据 Content-Type 响应头判断 “打开” 或 “下载”,默认 TXT/BAT 为文本类型(text/plain),会直接解析,那么我们在 CDN 中匹配我们所需要的文件,然后将其操作改为修改文件 HTTP 响应头,即可以完成这个操作
我们直接将 Content-Type 响应头设为 application/octet-stream 就可以了
