NGINX try_files适用于除一个URL之外的所有URL

时间:2019-01-05 16:51:38

标签: nginx configuration-files

我的网站上有一个简单的仪表板。这是指令:

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

它适用于/ dashboard之后的所有项目。例如,/ users或/ pages-所有CRUD操作均按预期进行。

/ dashboard上的index.php文件是我的“控制器”。它解析URL,并从那里包含并运行脚本。

例如: / dashboard / group / edit / 123456 可以正常工作,并且我获得了123456组编号的编辑页面。

但是当我从该页面发布到/ dashboard / group / update时,它会提供 /dashboard/group/index.php

因此,在第一个示例中,加载了编辑页面,并且屏幕顶部的url保持不变。

在第二个示例中,NGINX正在更改网址,因此我的脚本无法获取网址部分来完成工作。

我认为这可能与POST有关,但是我还有其他形式的使用POST的问题。

另外,或者可能是一条线索,try_files返回/dashboard/group/index.php,而指令应返回/dashboard/index.php。

是否还有另一个NGINX文件,其中可能包含如此旧的代码,从而覆盖了该域的配置?

我已经呆了几个小时,已经没有想法了。有什么想法吗?

*另外一个线索*

当我浏览到/ dashboard / group / update时,NGINX将按预期显示该页面。只有当我 POST 到该页面时,NGNIX才会将我发送到/dashboard/group/index.php。

再次,至少应该将我发送到/dashboard/index.php,而不是/dashboard/group/index.php。

3 个答案:

答案 0 :(得分:0)

/dashboard之后,您不能全部发送邮件:

location /dashboard {
    try_files $uri /dashboard/index.php?$uri&$args;
}

OR

location /dashboard {
    try_files $uri /dashboard/index.php?$query_string;
}

Nginx文档:https://nginx.org/en/docs/http/ngx_http_core_module.html#try_files

答案 1 :(得分:0)

代替

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

尝试

location /dashboard {
    index index.php; #adding this may work alone
    try_files $uri /dashboard/index.php?$uri;
}

答案 2 :(得分:0)

我得出的结论是我有一个缓存问题。 location指令适用于我尚未访问的所有项目。

因此,如上所述,我的配置可以正常工作。

我只需要弄清楚如何清除我的缓存(我看不到它在NGINX中没有设置!)

谢谢所有帮助过的人!