【发布时间】:2016-12-03 21:09:04
【问题描述】:
我正在 AngularJS 应用程序中实现 html5 模式。在服务器中,我需要将不带后缀的所有内容(因此不带扩展名,而不是静态资源)转发到基本 url:
@RequestMapping(value = "/{path:[^\\.]*}")
public String redirect(HttpServletRequest request) {
return "forward:/";
}
这对于 Angular 应用程序来说工作得很好,但是现在人们想要使用 HAL 浏览器,并且这个控制器还转发了一些浏览器请求,例如 https://localhost:8080/api。
是否可以修改正则表达式以匹配没有后缀的所有内容(就像现在一样),以及没有 /api 的所有内容?
这是当前的正则表达式:
"/{path:[^\\.]*}"
例如:
不应该匹配:
- 任何东西/api
- 任何东西/apianything
- 任何东西/文件名.extension
- anything/filename.extensionanything
(列表中的最后两点与当前的正则表达式一致)
应该匹配:
- 上面未列出的所有内容
【问题讨论】:
-
试试
"/{path:^(?!https?://.*/[^/]+)[^.]*}" -
但是为什么是 https?它应该匹配没有扩展名的所有内容和没有 api 的所有内容。我将编辑以添加示例列表
-
好的,试试
"/{path:^(?!(?:.*[^/]/)?api)[^.]*$}" -
你可以test it here。
-
最后它是这样工作的:"/{path:(?!(?:.*)?api)[^.]*}"
标签: java angularjs regex spring spring-boot