iOS与MacOS端Safari下载文件自动添加.txt后缀如何解决
问题原因
- 头配置语法错误:当前.htaccess里的
Header set Content-Description: File Transfer、Header set Content-Transfer-Encoding: binary写法不符合Apache配置规则,HTTP头字段名后不需要加冒号,错误的头格式导致Safari无法正确识别响应的文件类型 - Content-Disposition未指定文件名:仅设置
attachment没有携带filename参数时,Safari会自行根据响应内容推断文件类型,通用的application/octet-stream无法匹配ipa的专属类型,就会默认追加.txt后缀 - 未对ipa等特殊后缀单独配置正确的MIME类型:iOS的ipa包有专属的MIME标识,统一用
application/octet-stream会触发Safari的文件名修正逻辑
可行解决方案
修正后的.htaccess配置如下:
# Prevent Rewrites RewriteEngine off # 单独为ipa配置正确的MIME类型和下载头 <Files *.ipa> ForceType application/vnd.iphone Header set Content-Disposition "attachment; filename=app.ipa" Header set Content-Description "File Transfer" Header set Content-Transfer-Encoding "binary" Header set Pragma "public" </Files> # 其他文件通用下载配置 <Files "*.*"> <FilesMatch "!\.ipa$"> ForceType application/octet-stream Header set Content-Disposition attachment Header set Content-Description "File Transfer" Header set Content-Transfer-Encoding "binary" Header set Pragma "public" </FilesMatch> </Files> <IfModule mod_headers.c> Header set X-XSS-Protection "1; mode=block" Header set X-Content-Type-Options nosniff </IfModule> # Disable PHP php_flag engine off
本次调整核心改动点:
- 修正了所有HTTP头配置的语法错误,移除了字段名后多余的冒号
- 为ipa文件单独指定了专属MIME类型
application/vnd.iphone,匹配Safari对iOS安装包的识别规则 - 在Content-Disposition中明确指定了下载文件名,避免Safari自行修改后缀
- 保留了原有安全配置和PHP禁用规则,不影响原有站点安全策略
如果需要适配apk、plist等其他特殊格式的文件,单独新增对应的Files块配置专属MIME类型即可。
内容的提问来源于stack exchange,提问作者Parsa Yazdani
相关产品推荐
相关产品推荐

