如何配置 Undertow 处理程序以支持正确重写 SPA 书签?
How do I configure Undertow handlers to support proper rewriting for SPA bookmarking?
我正在尝试配置 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?
首先,在 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
这样的路径。虽然您可能永远不会使用这样的查询参数,但请记住它会被重写。
我正在尝试配置 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?
首先,在 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
这样的路径。虽然您可能永远不会使用这样的查询参数,但请记住它会被重写。