Nginx URL重写正则问题:移除/proxy及直接子路由路径
Nginx URL重写正则修正方案
你的问题出在原正则只移除了/proxy前缀,没有去掉紧随其后的直接子路径段。要实现需求,需要精准匹配/proxy/后的第一个路径段并将其移除,正确的正则配置如下:
正确的Rewrite规则
rewrite ^/proxy/[^/]+(/.*)?$ $1 last;
规则解释
^/proxy/:匹配URL开头的/proxy/固定前缀[^/]+:匹配/proxy/后的第一个路径段(支持包含连字符等特殊字符,[^/]表示匹配除斜杠外的任意字符)(/.*)?:可选匹配后续的路径部分(如果有的话),括号将这部分捕获为分组$1$1:将URL替换为捕获到的后续路径部分,Nginx会自动保留原URL的查询参数
验证示例
/proxy/vms/some/cool/route→ 替换后为/some/cool/route/proxy/oms/another/route→ 替换后为/another/route/proxy/ims/another/route?query→ 替换后为/another/route?query/proxy/some-word-with-character/fourth/route→ 替换后为/fourth/route
原规则问题分析
你之前使用的'^/proxy(/.*)$': '$1'会把/proxy/vms/some/cool/route中的/vms/some/cool/route捕获为$1,只移除了/proxy而保留了直接子路径vms,不符合需求。
内容的提问来源于stack exchange,提问作者Nitish Phanse
相关产品推荐
相关产品推荐

