如何配置 Undertow 处理程序以支持正确重写 SPA 书签?

Posted

技术标签:

【中文标题】如何配置 Undertow 处理程序以支持正确重写 SPA 书签?【英文标题】:How do I configure Undertow handlers to support proper rewriting for SPA bookmarking? 【发布时间】:2017-12-12 04:23:05 【问题描述】:

我正在尝试配置 JBoss EAP 7(通过 Undertow)以使用 Undertow 处理程序将任何 SPA URL 正确地重写回 SPA 的 index.html。不幸的是,我的 API 位于/api,所以我需要让任何以/api 开头的请求通过。

这是我当前的配置(来自另一个 SO 答案):

not equals(%R, '/my-app') and 
not equals(%R, '/my-app/') and 
not equals(%R, '/my-app/index.html') and 
not path-prefix('/my-app/api') and 
not regex('/my-app/.*\.js') and 
regex('/my-app/.+') -> rewrite('/my-app/index.html')

不幸的是,这似乎并没有重写任何东西。如何将此配置更新为属性重写 URL?

【问题讨论】:

【参考方案1】:

首先,在WEB-INF/undertow-handlers.conf 中尝试此配置:

path-prefix('/api') -> done
path-suffix('.js') -> done
path-prefix('/') -> rewrite('/')

您不需要在任何规则上加上 /my-app 前缀,因为它们已经在您的应用上下文中运行。

但是,您可能需要添加其他谓词以防止重写其他资源,例如样式表、网站图标、源映射等。full list of predicates and handlers 有助于生成更具体、更有针对性的规则。

请注意,path-suffix 仍代表/app?thing.js 之类的路径。尽管您可能永远不会使用这样的查询参数,但请记住它会被重写。

【讨论】:

以上是关于如何配置 Undertow 处理程序以支持正确重写 SPA 书签?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Undertow 的基于文本的处理程序配置格式的示例

如何在 Undertow 嵌入式服务器中登录文件?

Undertow 启用 url 重写

使用 undertow-handlers.conf 重写路径无法按预期工作

如何在 Undertow 的非阻塞处理程序中执行阻塞代码?

正确支持WPF的混淆器