我们正在从同一Spring Boot应用程序提供静态(角度)文件以及REST API。我们的目标是实现以下目标和结果:
/index.html (served as a static file - this is our Angular entry)
/api-docs.html (served as a static file)
/vendor.js (served as a static file)
/product/123 (redirected to /index.html so Angular routing can take over)
/api/products/123 (handled by our separate API controller)
我们正在使用以下模式表达式:
/**/{path:^(?!index\.html)^(?!api-docs\.html).+
(?<!css)
(?<!js)
(?<!jpg)
(?<!png)
(?<!tff)
(?<!woff)
(?<!map)
$}
尝试以上模式 重定向任何匹配的请求到/index.html
,以便Angular可以处理。
但是,我们的表达模式在以下路径中失败(匹配):
/api/products/123
然后无意中将其重定向到/index.html
。
我的问题,我们如何强制我们不希望匹配包含某个路径组件或以某个路径组件开头的任何端点请求? (例如/api/
)
我尝试将第一行的内容增强为:
/^api/**/{path:^(?!index\\.html)^(?!swagger-ui\\.html).+
/^api**/{path:^(?!index\\.html)^(?!swagger-ui\\.html).+
/(?!api)/{path:^(?!index\\.html)^(?!swagger-ui\\.html).+
/^api/{path:^(?!index\\.html)^(?!swagger-ui\\.html).+
.. (a few other permutations) ..
但是它们似乎都在其他端点中引入了失败。
我很难找到有关如何在AntPathMatcher
中使用高级排除/求反运算符的良好示例/文档。