我使用这个设置来提供静态 html 文件:
server {
root /var/www/static_html;
index index.html index.htm;
location / {
try_files $uri $uri/index.html $uri.html =404;
autoindex on;
}
}
现在,如果文件名包含空格,"spam spam.html"
则响应为“404 Not Found”
在access.log中:
"GET /spam%20spam.html HTTP/1.1" 404
可以提供这些文件吗?
答案1
当我尝试设置 NGINX 以从与 JPG/PNG 相同的文件名提供 WebP 文件时,我遇到了同样的问题,并且某些文件包含空格。发生这种情况的原因是:
- 空格不能在 URL 中使用,浏览器会自动将 URL 中的空格替换为
%20
,您可能已经注意到 - 在这种情况下,变量
$uri
将包含链接,%20
正如您从日志中看到的那样 - 当 NGINX 在磁盘上寻找
%20
名称中包含 的文件时,它将无法找到它,因为在磁盘上它存储在空间中而不是 中%20
,因此会导致 404。
实现这个功能的一个潜在方法是用%20
空格替换,而我想到实现这个功能的唯一方法是使用类似 OpenRestly 的 Lua NGINX 模块:
https://github.com/openresty/lua-nginx-module
然后,正确安装和配置后(不太容易!),你可以在之前尝试这样的事情try_files
:
access_by_lua_block {
ngx.var.uri = string.gsub(ngx.var.uri, "%20", " ")
}
这实际上没有经过测试,这只是一个想法。如果有更好的方法来实现这一点,我愿意去检查!