在 Wildfly 中托管 Angular 7 个 App 作为静态内容

Host Angular 7 App in Wildfly as static content

我正在尝试在 Wildfly 应用程序服务器中使用路径定位策略为 Angular 7 应用程序提供服务。

我设法使用静态文件处理程序将应用添加为静态资源。因此,当请求确切路径时,它会正确交付。例如。请求 http://my-wildfly-server/myApp/ 发送我的应用的 index.html

由于我使用的是路径定位策略,index.html 文件也应该发送到客户端以获取子链接。例如。请求 http://my-wildfly-server/myApp/my/route 也应该发送我的应用程序的 index.html

这让我想到了我的实际问题:是否可以使用某种与 nginx 的 try_file 规则相同的过滤器来配置 Wildfly 或 Undertow 子系统?换句话说:提供正确的文件,如果它针对特定请求存在,例如http://my-wildfly/myApp/styles.css 或者退回到 index.html 并让 Angular 负责路线?

如果可能的话,我想避免将我的 WebApp 捆绑到 WAR 文件中,或者将其更改为使用哈希位置策略...

我最近遇到了类似的挑战,请求刷新时出现 404。我最初的网络搜索导致需要 URL 重写。以下解决了我的问题: 1 - 重写规则的过滤器引用

<filter-ref 
 name="angular-refresh"
 predicate="not equals(%R, '/') and not equals(%R, '/index.html') and not path-prefix('/assets/')
 and not regex('^\/.*.(js|js.map)$') and not regex('^\/.*.(css)$')
 and not regex('^\/.*.(jpe?g|png|gif|svg)$') and not regex('^\/.*.(eot|ttf|woff|woff2)$')
 and regex('^(.*)$')"
/>

上面的过滤器为我捕获了作为真实文件的一般资源,然后是 Angular 管理的路由,过滤器是一行,为了清楚起见只是添加了换行符。

2 - 重写规则

<rewrite name="angular-refresh" target="/index.html" redirect="false"/>

重写规则中需要注意的一个重点是redirect="false"这会将路由保留在地址栏中。

我希望这可以帮助您解决当前的挑战。

为了完整起见,我 post 这里是实现我最初目标的另一个解决方案。 :) 正如我在@Tyrone 的回答的评论中所述,我最终将已编译的 Angular 应用程序捆绑到一个 WAR-File 中,并将以下文件添加到 WEB-INF 文件夹中:

jboss-web.xml

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web xmlns="http://www.jboss.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-web_5_1.xsd">
    <context-root>/</context-root>
</jboss-web>

我希望我的 Web 应用程序托管在 Web 服务器的根目录中。因此 context-root/...

undertow-handlers.conf

path-prefix('/api') -> done
regex('^(.*\/)(.*\.[a-zA-Z0-9]{2,5})$') -> done
path-prefix('/en') -> rewrite('/en')
path-prefix('/de') -> rewrite('/de')
path-prefix('/') -> rewrite('/en')

我所有的 /api 呼叫都应该直接转到相应的路由(在 API WAR-文件中配置)。正则表达式的第二行确保,每次调用最有可能是文件的东西,也直接通过......因为我有一个多语言应用程序,我需要将不同的语言重定向到 index.html正确文件夹的文件(第 3 行和第 4 行)。最后但同样重要的是,如果 Web 服务器的根目录被访问,我想重定向到默认语言,在我的例子中是英语(第 5 行)。

希望对您有所帮助。