Nginx:如果index.html不存在,加载默认文件吗?

时间:2019-09-15 13:26:34

标签: nginx

这就是我现在拥有的:

     location /tools {
            alias /var/www/tools/public;

            if (-f $uri) {
                    break;
            }
            if (-f "${uri}index.html") {
                    break;
            }
            if (-f $uri/index.html) {
                    break;
            }

            rewrite ^(/tools/[^/]+/).*$ $1default.html last;

            error_page 404 /tools/default.html;
    }

我要这样做,所以如果您转到/tools/module/,它将检查/tools/module/index.html是否存在。如果是这样,它将中断并加载index.html。如果不存在,请检查/tools/module/default.html是否存在。如果是这样,请加载该文件,然后它将进行客户端路由。否则,请加载/tools/default.html

但是,我得到了:

rewrite or internal redirection cycle while processing "/tools/module/default.html", request: "GET /tools/module/ HTTP/1.1"

由于/tools/module/index.html存在,因此不应该检查default.html

try_files从来没有为我工作过,我浪费了很多时间试图使其工作。我认为这是因为我使用的是alias,但不适用于try_files

编辑:

这些也不起作用:

rewrite ^(/tools/[^/]+)/.*(?<!(index\.html|dynamic\.html)))$ $1/dynamic.html last;

rewrite ^(/tools/[^/]+)/(?!.*(index\.html|dynamic\.html)))$ $1/dynamic.html last;

1 个答案:

答案 0 :(得分:0)

您可以在http或服务器级别将其设置为站点的默认行为,然后根据需要使用位置覆盖它:

error_page  404 /tools/default.html;
index   index.html default.html;