在Wildfly中将Angular 7应用程序托管为静态内容

时间:2019-02-11 15:02:09

标签: angular wildfly undertow

我正在尝试在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文件中或将其更改为使用哈希位置策略...

2 个答案:

答案 0 :(得分:1)

我最近遇到了类似的挑战,当请求刷新时遇到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",这会将路由保留在地址栏中。

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

答案 1 :(得分:0)

为了完整起见,我在这里发布了其他解决方案以实现我的最初目标。 :) 如我在@Tyrone答案的评论中所述,我最终将已编译的Angular应用程序捆绑到WAR文件中,并将以下文件添加到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-File中配置)。正则表达式的第二行确保,每次对最可能是文件的内容的调用也都直接通过...由于我有一个多语言应用程序,因此我需要将不同的语言重定向到的index.html文件。正确的文件夹(第3行和第4行)。最后但并非最不重要的一点是,如果单击了Web服务器的根目录,我想重定向到默认语言,在我的情况下为英语(第5行)。

希望有帮助。