这就是我现在拥有的:
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;
答案 0 :(得分:0)
您可以在http或服务器级别将其设置为站点的默认行为,然后根据需要使用位置覆盖它:
error_page 404 /tools/default.html;
index index.html default.html;