Nginx 位置索引被 try_files 覆盖

Nginx 位置索引被 try_files 覆盖

我最近设置了咕噜使用 Nginx 运行后端内容。

wiki 存储库存储在/path/to/root/todos(这是一个待办事项 wiki)。然而,由于 Gollum 的工作方式,如果它在 wiki 上找不到页面,它会自动尝试创建一个页面(这很棒),但会将 URL 重写如下:

http://www.domain.com/todos/foobar(尚不存在,将被创建)被重写为http://www.domain.com/create/foobar。现在,除非我为 Gollum 在其自己的指令中使用的每个可能的 uri 设置单独的条目,否则我们会在这里收到 404 错误。

为了解决这个问题,我在 nginx 配置中添加了以下内容:

```

location / {
    index index.php;
    try_files $uri /$uri /todos/$uri;
}

```

这可以工作,但它不会接受索引。如果我直接转到domain.com/index.php,我可以按预期查看索引页。但是,直接转到站点 ( domain.com) 会重定向到 wiki 的索引。 ( )。我不明白这种行为,因为只有在找不到原始 $uri 且存在domain.com/create/home时,它才应该路由到 to-dos(这是对 Gollum 端口的指令) 。proxy_passindex.php

我在这里做错了什么?这似乎是一个很简单的问题,但对我来说没有任何意义。

任何帮助都将不胜感激。

答案1

大约两年后,当我遇到同样的问题时,我才发现这个页面。

我的解决方案不涉及任何 nginx 黑客攻击,但使用 gollum 中的选项标志--base-path应该可以解决这个问题。尝试使用以下命令实例化 gollum:

$ gollum /path/to/root/todos/ --base-path todos

答案2

创建一个location /todos/块来包含该try_files指令,因为如果仅在 todo 目录中发现不存在的 URI,您将进行重定向。并且,index如果不同位置块的指令没有区别,通常建议将该指令放在服务器块中。(不过,这与本问题无关)

server {
    .............
    .............
    index index.php;

    location /todos/ {
        try_files $uri $uri/ /create/$uri;
    }

    ............
    ............
}

/$uri在您的配置中,除非您尝试重定向http://www.domain.com/todos/foobar到,否则try_files 的第二个参数毫无意义http://www.domain.com/foobar。后续前斜杠表示目录,而前面的斜杠仅表示根级文件/目录。

相关内容