nginx try_files 混淆

Med*_*her 0 nginx directory redirect

我要进行的设置如下:我希望 nginx 在 /test 子目录中查找文件,如果不存在,则从正常的 uri 提供该文件。我认为使用 try_files 这会相当简单。这是我想出的设置:

server {
    listen       80;
    server_name  test-server;

    location / {
        root   /opt/www;
        index  index.php;
        try_files /test$uri $uri;
    }
}
Run Code Online (Sandbox Code Playgroud)

这事半功倍。如果我访问http://test-server/something,并且有一个 /test/something 文件,它将提供 /test/something 文件。但是,如果没有 /test/something 文件,但有 /something 文件,则会返回 500 Internal Server 错误。我最好的猜测是存在某种递归循环,但我不知道替代方案是什么。

Mar*_*ald 5

try_files 的最后一个参数必须是有保证的文件。$uri 对此是不可接受的。而是使用try_files /test$uri $uri =404;