如何配置 Nginx 以便将 '?...' 作为文件名的一部分

Tzu*_*hay 10 nginx

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

所有包含“?”的 URL 即使文件确实存在,也会产生 404。例如

> GET /foo?lang=ar.html HTTP/1.1
...
...
< HTTP/1.1 404 Not Found
Run Code Online (Sandbox Code Playgroud)

虽然名为foo?lang=ar.html的文件确实存在于预期位置。

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

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

kol*_*ack 14

您可以使用try_files用两种$request_uri$uri$is_args$args根据您是否想拥有urlencoded的比特解码或不找文件名时。