Я использую эту настройку для обслуживания статических 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
Возможно ли обслуживать эти файлы?
Я столкнулся с той же проблемой при попытке настроить NGINX для обслуживания файлов WebP с тем же именем файла, что и JPG/PNG, и некоторые файлы содержали пространства. Причина, по которой это происходит, заключается в следующем:
%20
, как вы, возможно, знаете ]$uri
в этом случае будет содержать ссылку с %20
, как видно из логов%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", " ")
}
Это не на самом деле не проверено, это просто идея. Если есть лучшие способы добиться этого, я готов их проверить!