Nginx 位置规则带或不带

Nginx 位置规则带或不带

我已经在网上搜索了几天,但没有找到答复。

在 Nginx 中,您可以使用Location并且我希望Location我的请求在请求末尾带有“/”或不带有“/”来接受。

我该怎么做 ?

这是我的文件:

server {
    server_tokens off;
    server_name test.fr;


    include /etc/nginx/include.d/ssl-default.conf;

    location ~*test\/(.*) {
            proxy_pass http://test.fr/$1$is_args$args;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto https;
    }


}

多谢

答案1

它是基本的正则表达式,您可以在这里找到很棒的交互式教程: https://regexone.com/

因此,为了让 nginx 接受带有“/”或不带有“/”的位置,您只需在转义的“/”字符后添加一个问号,如下所示:

location ~*test(\/)?(.*)

请注意,URL 的其余部分((.*)部分)现在位于第二个捕获组中,因此您也需要更改指令proxy_pass

proxy_pass http://test.fr/$2$is_args$args;

因此你的最终配置将是这样的:

server {
    server_tokens off;
    server_name test.fr;


    include /etc/nginx/include.d/ssl-default.conf;

    location ~*test(\/)?(.*) {
            proxy_pass http://test.fr/$2$is_args$args;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto https;
    }


}

相关内容