我有一个带有嵌入式Jetty 9.4.12的Spring Boot 2.1.0应用程序,我需要重写从http://localhost/rewrite到http://localhost/rewritten的URL请求 . 服务器上不存在http://localhost/rewrite,它需要使用HTTP代码200进行响应(/在服务器上存在重写) . 我使用Jetty 's RewriteHandler and managed to have a successful URL redirect but this will not solve my problem because the redirect responds with HTTP code 302. I need my 14973 endpoint to respond directly with HTTP code 200 and I don' t理解为什么RewritePatternRule不像RedirectPatternRule那样工作 . 通过以下实现,我得到以下响应:
-
/ redirect - > HTTP代码302(然后成功重定向到/重定向)
-
/重定向 - > HTTP代码200
-
/rewrite -> HTTP code 404 (I expect here HTTP code 200 and content from /rewritten)
-
/重写 - > HTTP代码200
请帮忙 .
@Bean
public ConfigurableServletWebServerFactory webServerFactory2() {
JettyServletWebServerFactory factory = new JettyServletWebServerFactory();
factory.addServerCustomizers(new JettyServerCustomizer() {
@Override
public void customize(Server server) {
RewriteHandler rewrite = new RewriteHandler();
rewrite.setRewriteRequestURI(true);
rewrite.setRewritePathInfo(false);
rewrite.setOriginalPathAttribute("requestedPath");
// Working
RedirectPatternRule rule1 = new RedirectPatternRule();
rule1.setPattern("/redirect");
rule1.setLocation("/redirected");
rewrite.addRule(rule1);
// Not working
RewritePatternRule rule2 = new RewritePatternRule();
rule2.setPattern("/rewrite");
rule2.setReplacement("/rewritten");
rewrite.addRule(rule2);
HandlerCollection handlerCollection = new HandlerCollection();
handlerCollection.setHandlers(new Handler[] {rewrite, server.getHandler()});
server.setHandler(handlerCollection);
}
});
return factory;
}