Spring Cloud Gateway无尾斜杠时样式/图片无法添加上下文路径问题
问题分析与解决方案
为什么会陷入重定向循环?
当前路由规则匹配/myapp路径,重定向到/myapp/后,新的请求/myapp/仍会被该路由规则匹配(path("/myapp")会匹配包含/myapp的路径前缀),导致无限触发重定向。
两种可行解决方案
方案一:从根源修正静态资源路径(推荐)
问题本质是后端应用生成的资源URL未携带/myapp上下文前缀,导致浏览器直接向网关根路径请求资源。
- 给后端应用配置上下文路径:在应用配置中设置
server.servlet.context-path=/myapp,这样后端生成的所有资源URL会自动带上/myapp前缀。 - 网关路由配置调整为:
此时请求routeBuilder.route( p -> p.path("/myapp/**") .filters(f -> f.stripPrefix(1)) // 移除请求路径中的第一个前缀/myapp .uri("lb://gatewayserver") );http://localhost:gatewayport/myapp/image.gif会被转发到http://localhost:appport/myapp/image.gif,后端可正确返回资源。
方案二:修复重定向循环问题
如果必须通过重定向修正路径,需要精确匹配不带斜杠的/myapp请求,避免匹配后续带斜杠的路径:
// 仅处理不带斜杠的/myapp请求,重定向到/myapp/ routeBuilder.route( p -> p.path("/myapp") .and().not(p.path("/myapp/**")) .filters(f -> f.redirect(302, "/myapp/")) .uri("lb://gatewayserver") ); // 单独配置/myapp/**路径的转发规则 routeBuilder.route( p -> p.path("/myapp/**") .filters(f -> f.stripPrefix(1)) .uri("lb://gatewayserver") );
这样只有访问http://localhost:gatewayport/myapp时会触发重定向,而/myapp/及后续资源请求会直接转发,不会陷入循环。
内容的提问来源于stack exchange,提问作者Manisha
相关产品推荐
相关产品推荐

