Nginx alias 支持中文目录,需直接写原始中文路径并加双引号,location 必须以斜杠结尾且精确匹配,Nginx 自动解码客户端请求,无需手动处理;同时确保权限、UTF-8 编码及 SELinux 上下文正确。
中文目录在 Nginx alias 中能直接用,关键不是“怎么转义”,而是路径写法和请求编码要匹配。
服务器上目录真实叫 /var/www/图片资源/2024年,配置就照写,别改成 %E5%9B%BE%E7%89%87%E8%B5%84%E6%BA%90 或 /var/www/图片资源 —— 那两种都错。
alias "/var/www/图片资源/2024年/";(推荐加双引号,防空格和中文解析异常)alias /var/www/%E5%9B%BE%E7%89%87%E8%B5%84%E6%BA%90/;(Nginx 找不到这个路径)alias "/var/www/图片资源/";(反斜杠在 Nginx 配置里无效,会被忽略或报错)比如想把 /img/ 映射到中文目录,location 写法直接影响拼接结果:
location /img/ { alias "/var/www/图片资源/"; } → 请求 /img/photo.jpg 对应 /var/www/图片资源/photo.jpg
location /img { alias "/var/www/图片资源/"; } → 可能只截掉 /img 字符串,剩下 photo.jpg 拼过去变成 /var/www/图片资源/photo.jpg,但若请求是 /img/sub/photo.jpg 就容易错位或越权浏览器访问 https://example.com/img/我的封面.png,会自动把“我的封面.png”转成 %E6%88%91%E7%9A%84%E5%B0%81%E9%9D%A2.png 发过去。Nginx 内部自动解码后再跟 alias 路径拼接 —— 你不需要、也不该在配置里加 rewrite 或 set 去手动处理。
验证方法:开 debug 日志,看 error_log 里实际 open() 的文件路径是不是你预期的中文路径。
Linux 下中文目录名本身没问题,但得确保两件事:
/var/www/图片资源/ 有读取(r)和执行(x)权限(目录必须有 x 权限才能进入)ls -Z 查,必要时 chcon 或临时 setenforce 0 测试)