我在几个要点和配置示例中发现了一个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指令是否匹配?对我来说,这看起来像一些无意义的黑客攻击。
请确认或解释原因 - 谢谢:)
答案 0 :(得分:0)
这就是这里发生的事情:
第一个位置= /
仅在请求中的路径为/
时使用,例如http://example.com/
。第二个位置/
用于所有其他网址,例如http://example.com/foo
或http://example.com/bar
。
第一个位置的原因是为了避免index
的任何干扰 - 指向重定向到index.html或类似的指令。
在第一个位置内,try_files
- 指令首先查找名为@site
的文件,该文件不存在,然后重定向到指定位置@site
。此构造的原因是重定向到指定位置纯粹是内部的,即无法直接从客户端访问@site
位置,并且$uri
在此重定向期间保持不变(这不会是其他重定向的情况)。第一个参数@site
可以是除现有文件之外的任何内容。为清晰起见,我更愿意将其称为DUMMY
。
第二个位置首先尝试静态文件,如果没有找到,则还会重定向到指定位置。