我最近设置了咕噜使用 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_pass
index.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
。后续前斜杠表示目录,而前面的斜杠仅表示根级文件/目录。