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



我正试图在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",它将路由保留在地址栏中。

我希望这能帮助你解决当前的挑战。

为了完整起见,我在这里发布了实现我最初目标的另一个解决方案。:)正如我在@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中配置)。regex的第二行确保,对最有可能是文件的东西的每次调用都直接通过。。。由于我有一个多语言应用程序,我需要将不同的语言重定向到正确文件夹的index.html文件(第3行和第4行)。最后但同样重要的是,如果web服务器的根被击中,我想重定向到默认语言,在我的情况下是英语(第5行)。

希望能有所帮助。

相关内容

  • 没有找到相关文章

最新更新