当前位置:首页 -少年百科 - 大杂烩 - PC与手机 - 正文*

NGINX 目录浏览支持中文文件名,解决乱码和打开错误

2025-6-12 21:11:05

以下问题均是使用1.25,1.27国外一个增加了文件数的版本,对中文支持不好。

换作1.26和1.28正常。


在WINDOOWS系统中,通过以下设置,让NGINX可以直接浏览硬盘上的文件夹


location /file/ {

alias  D:/;
index index.html index.htm index.php;
 auth_basic
auth_basic_user_file htpasswd.txt; 
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
autoindex_format html;

}


实际运行过程中发现在英文文件名下完全正常,但是如果有中文文件名,显示正常,打开时报500错误,因为WINOWS系统里提供的URL采用的GB2312编码,错误日志上记录为:No mapping for the Unicode character exists in the target multi-byte code page


在配置文件中增加 

charset UTF-8;

目录里中文显示为乱码,URL编码仍然是GB2312,同样打不开。

网上介绍是WINDOWS设置里更改使用Unicode UTF-8支持。修改办法是:WINOWS搜索“控制面板”,“时钟和区域”,“管理”,“更改系统区域设置”,勾选“Beta版:使用Unicode UTF-8提供全球语言支持”。

然后按要求重启计算机。(注意:这样设置后,一些像记事本类软件,过去系统默认保存的是ANSI格式,但现在是UTF-8,因此一些中文文本会出现乱码。注意打开时选择正确的编码。)


启动NGINX后,目录浏览中文显示正常,打开也正常了(确认在配置里增加了 charset UTF-8;)。

但是,在1.27及以前的版本,对于有些中文文件夹会打不开,错误日志为:FindNextFile()  failed (234: More data is available), 访问日志里状态码是200,但长度是0.

反复检查权限等,没能找出差别,有的把文件移动复制一下又好了,感觉是软件的BUG。


下载最新的稳定版1.28,问题消失。


这个使用Unicode UTF-8设置的修改,也解决了WINDOWS系统在数据库系统中默认按GB2312编码的问题。如ACCESS里是无法设置UTF-8,导致PHP读取数据必须使用conv("gbk", "utf-8",value),也不能使用中文字段名。这里修改系统设置后,就可以使用中文字段名,数据也不用再转换。