Nginx 自动重定向添加尾部斜杠

Nginx 自动重定向添加尾部斜杠

在我的 nginx 配置中我有一个子路径的位置块:

location /documentation {
        alias /usr/share/nginx/html/documentation;
        index index.html;

        try_files $uri $uri/ /documentation/index.html;
}

从技术上讲,它是有效的。但是只有当我导航到 http://localhost:90/documentation/ 时才有效。当我导航到 http://localhost:90/documentation 时,它会将我重定向到 http://localhost/documentation/,这当然会失败,因为我丢失了端口。

这是重定向的日志:172.24.0.1 - - [26/Feb/2024:09:12:56 +0000] "GET /documentation HTTP/1.1" 301 169 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36" "-"

是否有人知道为什么会发生这种重定向?

这可能很重要:在这个位置,我正在提供 Docusaurus 的静态构建。并且整个设置位于 docker 容器中。

答案1

我自己找到了解决方案:

显然,nginx 会自动在 uri 后面添加一个斜杠,并使用绝对重定向 (HTTP 301) 来实现这一点。这会导致应用默认协议端口,在本例中为 (http) => 80。

我添加了absolute_redirect off;这会导致重定向成为“软”重定向,并且这会使 URL 保持完整。

相关内容