如何配置 Nginx,使其将“?…”视为文件名的一部分

如何配置 Nginx,使其将“?…”视为文件名的一部分

Nginx 仅提供静态文件服务,但有些文件名包含“?”。是的,问号。

所有包含“?”的 URL 都会导致 404 错误,即使文件确实存在。例如

> GET /foo?lang=ar.html HTTP/1.1
...
...
< HTTP/1.1 404 Not Found

当名为foo?lang=ar.html确实存在于预期位置。

我想知道是否有办法告诉 Nginx 将整个请求视为 URL,包括当前翻译为查询字符串的内容。

我想到唯一的解决方案是编写一个执行此操作的小型 Web 服务器,并让 nginx 反向代理该 Web 服务器,但我更喜欢单独使用 nginx 来完成它。

答案1

您可以使用try_files使用$request_uri$uri$is_args$args取决于您在寻找文件名时是否要解码 urlencoded 位。

相关内容