将所有不以前缀开头的 URL 重定向到给定前缀的最佳方法是什么

将所有不以前缀开头的 URL 重定向到给定前缀的最佳方法是什么

我想重定向所有 URL不要以前缀开始/abcd/->/abcd/考虑到服务器使用proxy_pass

server {
        location / {

                proxy_pass http://upstream-server/;
                proxy_set_header Host $http_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 $scheme;

                if ($request_uri = "/"){
                        return 301 /abcd/;
                }
        }
}

我正在考虑使用正则表达式和否定这样的事情:

location ~ ^/(?!abcd.*).*$ {
          return 301 /abcd/;
}

还有其他/更好的解决方案吗?

答案1

我认为这比你需要的更复杂。Nginx评估最具体的块到最不具体的块。

在这个例子中,任何与 /abcd 匹配的内容都会转到 proxy_pass 块,其他所有内容都会转到重定向的 / 块。

我还没有测试过这个,尝试一下,如果不行的话我可以再考虑一下。

location /abcd {
     proxy_pass (etc);
}

location / {
      return 301 /abcd/;
}

相关内容