我有一个带有嵌入式Jetty 9.4.12的Spring Boot 2.1.0应用程序,我需要重写从http://localhost/rewritehttp://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;
}