首页 新闻 会员 周边

location ~* ^/admin/(.*)这种匹配https://www.sweet.com/ntpii/admin/login?吗

0
[已解决问题] 解决于 2026-03-20 15:28

location ~* ^/admin/(.*)这种匹配https://www.sweet.com/ntpii/admin/login?吗

什么情况下上面可以,因为环境是正常的,

问题补充:

哦,好像看到了,这个location上面有个#rewrite hardware load balance proxy
location /ntpii/ {
rewrite /ntpii/(.*) /$1 last;
}

*Tesla*的主页 *Tesla* | 小虾三级 | 园豆:1530
提问于:2026-03-20 15:22
< >
分享
最佳答案
0

在 Nginx 的 location 里:

~* 是什么意思?

• ~:表示正则匹配

• *:表示不区分大小写

合起来:
~* = 不区分大小写的正则匹配

不匹配。

原因很简单:

• 你的正则:location ~* ^/admin/(.*)
要求 URL 路径必须以 /admin/ 开头

• 你给的地址:https://www.sweet.com/ntpii/admin/login
路径是 /ntpii/admin/login,是以 /ntpii/ 开头的

 

想要能匹配:

最常见:Nginx 做了 rewrite / 重写路径

rewrite ^/ntpii/(.*)$ /$1 break;

或者

rewrite ^/ntpii/admin/(.*)$ /admin/$1 last;

结果:
请求进来是 /ntpii/admin/login
重写后变成 /admin/login
于是你的 ^/admin/ 就匹配上了。

还有一点不懂,在同一个nginx配置里,一次请求:匹配完nginx规则,还能再匹配

一次请求,Nginx 可以重新匹配多次 location。
关键就在你看到的那个词:last

一句话原理

rewrite ... last;

意思是:
改完 URL 后,立刻重新从头匹配一遍所有 location,就像刚进来一个新请求一样。

你的请求到底走了几遍?

访问:/ntpii/admin/login

第一遍匹配

1. 路径:/ntpii/admin/login

2. 命中:location /ntpii/

3. 执行:rewrite /ntpii/(.*) /$1 last;

路径变成:/admin/login

4. 看到 last
→ 扔掉当前匹配,重新全局匹配一次

第二遍匹配

1. 路径已经是:/admin/login

2. 从头找所有 location

3. 命中:location ~* ^/admin/(.*)

4. 正常执行里面的 proxy_pass / 逻辑

所以:
你看到是一个请求,实际上 Nginx 内部走了两轮 location 匹配。


所以:
你看到是一个请求,实际上 Nginx 内部走了两轮 location 匹配。

比一下你就懂

• rewrite ... break;
→ 改完路径,不再重新匹配,就在当前 location 执行完

• rewrite ... last;
→ 改完路径,重新全局匹配 location(你现在就是这种)

*Tesla* | 小虾三级 |园豆:1530 | 2026-03-20 15:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册