Skip to content

Commit 0ce0f75

Browse files
committed
feat(proxy): 优化路径匹配
- 增强路径匹配逻辑,确保仅匹配完整路径段
1 parent 8fb5dec commit 0ce0f75

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

internal/handler/proxy.go

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -157,18 +157,25 @@ func (h *ProxyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
157157
// 查找匹配的代理路径
158158
var matchedPrefix string
159159
var pathConfig config.PathConfig
160+
161+
// 首先尝试完全匹配路径段
160162
for prefix, cfg := range h.pathMap {
163+
// 检查是否是完整的路径段匹配
161164
if strings.HasPrefix(r.URL.Path, prefix) {
162-
matchedPrefix = prefix
163-
pathConfig = cfg
164-
break
165+
// 确保匹配的是完整的路径段
166+
restPath := r.URL.Path[len(prefix):]
167+
if restPath == "" || restPath[0] == '/' {
168+
matchedPrefix = prefix
169+
pathConfig = cfg
170+
break
171+
}
165172
}
166173
}
167174

168-
// 如果没有匹配的路径,返回 404
175+
// 如果没有找到完全匹配,返回404
169176
if matchedPrefix == "" {
177+
// 返回 404
170178
http.NotFound(w, r)
171-
log.Printf("[Proxy] %s %s -> 404 (%s) from %s", r.Method, r.URL.Path, utils.GetClientIP(r), utils.GetRequestSource(r))
172179
return
173180
}
174181

@@ -179,7 +186,6 @@ func (h *ProxyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
179186
decodedPath, err := url.QueryUnescape(targetPath)
180187
if err != nil {
181188
h.errorHandler(w, r, fmt.Errorf("error decoding path: %v", err))
182-
log.Printf("[Proxy] ERR %s %s -> 500 (%s) decode error from %s", r.Method, r.URL.Path, utils.GetClientIP(r), utils.GetRequestSource(r))
183189
return
184190
}
185191

@@ -198,15 +204,13 @@ func (h *ProxyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
198204
parsedURL, err := url.Parse(targetURL)
199205
if err != nil {
200206
h.errorHandler(w, r, fmt.Errorf("error parsing URL: %v", err))
201-
log.Printf("[Proxy] ERR %s %s -> 500 (%s) parse error from %s", r.Method, r.URL.Path, utils.GetClientIP(r), utils.GetRequestSource(r))
202207
return
203208
}
204209

205210
// 创建新的请求时使用带超时的上下文
206211
proxyReq, err := http.NewRequestWithContext(ctx, r.Method, targetURL, r.Body)
207212
if err != nil {
208213
h.errorHandler(w, r, fmt.Errorf("error creating request: %v", err))
209-
log.Printf("[Proxy] ERR %s %s -> 500 (%s) create request error from %s", r.Method, r.URL.Path, utils.GetClientIP(r), utils.GetRequestSource(r))
210214
return
211215
}
212216

0 commit comments

Comments
 (0)