代理之前删除可选的尾部斜杠

代理之前删除可选的尾部斜杠

我想将一些请求代理到另一台服务器,并且永远不发送尾部斜杠。我想出了下面的方法,这种方法可行,但这真的是最好的方法吗?感觉有点像我在绕远路,不过也许我已经盯着它看了太久了……

location ~ ^/proxy(?<proxy_to_path>.+[^/])/?$ {
    proxy_pass              http://127.0.0.1:8080$proxy_to_path;
}

答案1

我个人不喜欢在location指令中使用复杂的正则表达式,因为nginx需要测试每个请求的 URI。您可以使用一个或多个rewrite...break语句来使用可能更简单的方案。

例如:

location ^~ /proxy/ {
    rewrite ^/proxy(.+?)/?$ $1 break;
    proxy_pass http://127.0.0.1:8080;
}

修饰符^~可避免任何正则表达式位置块的干扰。请参阅这个文件了解更多信息。

捕获是非贪婪的,因此可选的尾随/将被删除。

相关内容