Nginx rewrite规则实现无后缀路径重写为带.vcf后缀文件下载问题求解
问题根因
你当前使用带last标识的rewrite规则属于Nginx内部重写逻辑,浏览器端不会感知到URL变化,始终认为请求的是/az路径,因此保存文件时默认取路径最后一段az作为文件名,不会自动补充.vcf后缀。
解决方案
提供两种可选配置方案,按需选择即可:
方案1:改为外部重定向(浏览器URL会显示带.vcf后缀)
把rewrite规则的last参数改为redirect(临时302跳转)或permanent(永久301跳转),触发浏览器主动跳转至带后缀的地址:
server { server_name localhost; root /www/data; # 改为redirect实现外部跳转 rewrite ^(/.*) $1.vcf redirect; } types { text/x-vcard vcf; }
方案2:添加Content-Disposition响应头(浏览器URL保持不变)
如果不需要修改浏览器显示的URL,直接通过响应头强制指定下载文件名带后缀即可:
server { server_name localhost; root /www/data; rewrite ^(/.*) $1.vcf last; # 新增下行指定下载文件名 add_header Content-Disposition 'attachment; filename="$uri"'; } types { text/x-vcard vcf; }
修改配置后执行nginx -s reload重载配置即可生效。
内容的提问来源于stack exchange,提问作者Alexander Zeitler
相关产品推荐
相关产品推荐

