问题背景:常规方案的局限性
在搭建PDF文档中心时,我们常依赖Nginx的目录索引(autoindex on
)和字符集配置(charset utf-8
)实现文件预览。但当遇到中文命名的PDF文件时,常规配置往往陷入三大困局:
- 乱码陷阱:浏览器显示文件名乱码,即使配置
charset
也无法根治编码兼容问题12; - 路径解析失效:URL自动编码(如
%E6%96%87
)导致Nginx无法正确映射物理路径3; - 跨平台差异:Windows/Linux文件系统编码差异加剧兼容复杂度4。
破局思路:Script脚本与Nginx的协同作战
最终配置文件如下:
location /pdf目录/ {
alias "站点目录";
autoindex on;
autoindex_localtime on;
autoindex_exact_size off;
try_files $uri $uri/ =404;
add_after_body /autoindex_js.html;
}
location = /autoindex_js.html {
internal;
return 200 '<script>
document.addEventListener("DOMContentLoaded", function() {
var links = document.querySelectorAll("a");
links.forEach(function(link) {
var href = link.textContent;
link.setAttribute("href", href);
link.setAttribute("target", "_blank");
link.textContent = decodeURIComponent(link.textContent);
});
});
</script>';
}
思路创新
以上思路创新由三哥提供