我有一个react
应用程序运行在dropwizard
服务器。这bundle.js
在 /ui 上提供。当我打开 /ui 上的 url 并导航应用程序(并转到 /ui/content)时,它工作正常。但是当我尝试刷新特定页面(例如 /app/content)时,它会给出一个404
.
我了解客户端渲染和服务器端渲染,而且我需要做一个GET
调用 /ui 并将其余部分路由到客户端,但我找不到任何有关如何执行此操作的文档dropwizard
.
我也知道使用hashHistory
代替browserHistory
会起作用(因为网址的哈希部分不会发送到服务器),但我想知道这是否可以通过 browserHistory 来完成。
有关于如何配置的文档express
切断但我找不到任何东西jetty/dropwizard
.
在 Dropwizard 级别,您可以使用 servlet 过滤器来重写 URL。一种流行的实现是塔基网址重写过滤器。您可以按如下方式实现它:
-
使用 Dropwizard 注册过滤器:
@Override
public void run(ExampleConfiguration configuration, Environment environment) {
FilterRegistration.Dynamic registration = environment.servlets()
.addFilter("UrlRewriteFilter", new UrlRewriteFilter());
registration.addMappingForUrlPatterns(null, true, "/*");
registration.setInitParameter("confPath", "urlrewrite.xml");
}
-
Add the urlrewrite.xml
配置文件到你的src/main/resources
,添加重写规则
<urlrewrite>
<rule>
<from>^/(?!(api|static/|manifest\.json|assets-manifest\.json|favicon\.ico)).*$</from>
<to type="forward">/index.html</to>
</rule>
</urlrewrite>
上面的规则指出,如果请求路径与上面的正则表达式匹配,则将请求转发到index.html
文件。我用来测试的是创建反应应用程序,其中输出是匹配器中列出的一些文件。这些文件不应该转发。
正则表达式使用否定前瞻,因此它就像一个否定。看起来我是在说如果路径与那些文件匹配,则转发,但实际上恰恰相反。如果您不使用 create-react-app,那么您的正则表达式将会有所不同。重点是否定您不想转发的文件。
我整理了一个工作演示。查看GitHub 仓库.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)