如何在HAProxy中移除/api/路径且不转义路径参数?
解决方案
使用HAProxy的url_raw提取器替代url,保留原始URL编码状态,修改后的规则如下:
http-request set-uri %[url_raw,regsub(^/api/,/,)]
原理说明
- 原规则中的
url提取器会自动解码URL中的转义字符(比如将%2F还原为/),导致RestEasy接口的路径参数被拆分为多个路径段,触发NotFoundException。 url_raw提取器获取的是客户端发送的原始未解码URL字符串,替换/api/前缀时不会改变后续路径参数的编码状态,因此RestEasy能正确识别{path}参数对应的完整编码值(如%2Fuser%2Foptions),匹配接口路由。
验证效果
修改规则后,HAProxy转发的请求路径将保持与本地环境一致:GET loadPageData/%2Fuser%2Foptions,接口会返回正常的200响应。
内容的提问来源于stack exchange,提问作者MysticUnicorn
相关产品推荐
相关产品推荐

