Mod rewrite nginx重写规则,让两个规则都工作,而不仅仅是其中一个

Mod rewrite nginx重写规则,让两个规则都工作,而不仅仅是其中一个,mod-rewrite,nginx,Mod Rewrite,Nginx,我试图让这个重定向对这两个规则都起作用,但不知道怎么做, 根据文件,这应该是可行的,他们是分开做的。但我希望这两条规则都适用 此外,还应可以访问/panel/assets/文件夹 有人能帮我制定这些规则吗?我花了30多分钟试图解决这个问题 if (!-e $request_filename){ rewrite ^/(.*)$ /index.php last; rewrite ^/panel/(.*) /panel/index.php last; break; } 颠倒顺序,因

我试图让这个重定向对这两个规则都起作用,但不知道怎么做, 根据文件,这应该是可行的,他们是分开做的。但我希望这两条规则都适用

此外,还应可以访问/panel/assets/文件夹

有人能帮我制定这些规则吗?我花了30多分钟试图解决这个问题

if (!-e $request_filename){
   rewrite ^/(.*)$ /index.php last;
   rewrite ^/panel/(.*) /panel/index.php last;
   break;
}

颠倒顺序,因为
^/(.*)$
也匹配
^/panel/(.*)
。但是您当然可以避免使用if with
try\u files
指令。顺便说一句,
break
指令在这里是无用的,因为
last
标志执行内部重定向,因此永远无法到达

例如,你可以把它变成这样的东西:

location / {
    try_files $uri $uri/ @fallback;
}

location @fallback {
    rewrite ^/panel/(.*)$ /panel/index.php last;
    rewrite ^/(.*)$ /index.php last;
}
另一种方法是将
map
try\u文件一起使用,并执行如下操作:

map $uri $target {
    default          "/404.html";
    "~^/panel/(.*)$" "/panel/index.php";
    "~^/(.*)$"       "/index.php";
}

server {

    ...

    location / {
        try_files $uri $uri/ $target;
    }

}

从性能角度看,这甚至更好,但您必须确保目标资源可用,否则它将进入内部重定向循环。

您好,感谢您的发布,但两者都失败了。第一个使/面板根本不工作anymore@user1162685这是因为配置的另一部分存在问题。