为什么这个正则表达式匹配,但 NGINX 中 location / 不匹配

为什么这个正则表达式匹配,但 NGINX 中 location / 不匹配

我在 NGINX 中基本上有这两个位置(为调试目的添加了返回代码)

location / {
    return 401;
}


location ~ "^/(assets|((de|en|es|fr|it|zh|ru)-[a-z]{3}))" {
    return 402;
}
         

这个想法是在 GET 上返回 401https://www.example.com/,但它总是返回 402

怎么可能?

$ http https://www.example.com/ --print Hh
GET / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Host: www.example.com
User-Agent: HTTPie/1.0.3

HTTP/1.1 402 Payment Required
Connection: keep-alive
Content-Length: 176
Content-Type: text/html
Date: Mon, 07 Jun 2021 10:07:37 GMT
Server: nginx/1.18.0 (Ubuntu)

我也测试了正则表达式https://nginx.viraptor.info/并且它不匹配www.example.com/请求,所以我相信它应该会遇到location /阻碍?

编辑:在此之前我有一些

rewrite ^/$ /de-abc/;

答案1

原因是配置中先前的重写不是重定向

rewrite ^/$ /de-abc/;

我打算使用

rewrite ^/$ /de-abc/ redirect;

相关内容