Nginx 服务器块

Nginx server block

大家好, 我对 nginx 服务器块有一个小问题,我希望这里的人知道解决方案。

我的配置是这样的:

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://www.example.com;
}

server{
    listen 80;
    server_name *.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name .example.com;
...
}

所以第一个块是正常的 http 重定向到 https,第二个是捕获子域,第三个是位置块所在的位置等。

我的问题是,当第二个块捕获请求时,我想将 /admin 添加到 URL,所以它将是 subdomain.example.com/admin,但我必须检查它是否已经有 /admin 所以我没有得到这样的东西 subdomain.example.com/admin/admin.

我尝试了 server_name *.example.com$server_name ~.example.com(=<id>.*) 然后 if ($id = '') 和数百种组合,但没有得到任何有用的东西。

这里有没有人遇到类似的问题并解决了?

server {
    listen 80;
    server_name *.example.com;
    if ($request_uri !~ ^/admin/) { 
        return 301 https://$host/admin$request_uri;
    }
    return 301 https://$host$request_uri;
}