对于nginx中的相同位置,请使用double try_files指令

时间:2016-11-28 14:54:59

标签: nginx

我在几个要点和配置示例中发现了一个nginx配置代码段(主要用于PHP应用程序):

#site root is redirected to the app boot script
location = / {
    try_files @site @site;
}
#all other locations try other files first and go to our front controller if none of them exists
location / {
    try_files $uri $uri/ @site;
}

但我只是不明白:第一个try_files指令是否匹配?对我来说,这看起来像一些无意义的黑客攻击。

请确认或解释原因 - 谢谢:)

1 个答案:

答案 0 :(得分:0)

这就是这里发生的事情:

第一个位置= /仅在请求中的路径为/时使用,例如http://example.com/。第二个位置/用于所有其他网址,例如http://example.com/foohttp://example.com/bar

第一个位置的原因是为了避免index的任何干扰 - 指向重定向到index.html或类似的指令。

在第一个位置内,try_files - 指令首先查找名为@site的文件,该文件不存在,然后重定向到指定位置@site。此构造的原因是重定向到指定位置纯粹是内部的,即无法直接从客户端访问@site位置,并且$uri在此重定向期间保持不变(这不会是其他重定向的情况)。第一个参数@site可以是除现有文件之外的任何内容。为清晰起见,我更愿意将其称为DUMMY

第二个位置首先尝试静态文件,如果没有找到,则还会重定向到指定位置。