1

I have an application running on an embeded jetty server. I'm trying to add a write to add a RewriteHandler in order to redirect from the root of my web-application (http:///www.example.com) to (http:www.example.com/web). I added the RewriteHandler, however I'm being redirected to http://www.example.com/home.html (or main.html, depending on if the user has signed in or not).

I actually want to be redirected to http://www.example.com/web/home.html. How should I modify the code below, in order for that to happen:

ServletContextHandler servletHandler =
            new ServletContextHandler(ServletContextHandler.SESSIONS);
    ServletHolder jerseyServlet = servletHandler.addServlet(ServletContainer.class, "/*");


    String staticPath = StartServer.class.getResource("/resources/www-static/").toExternalForm();
    ResourceHandler resourceHandler = new ResourceHandler();
    resourceHandler.setBaseResource(Resource.newResource(staticPath));
    resourceHandler.setWelcomeFiles(new String[] { "home.html" });
    ContextHandler staticHandler = new ContextHandler("/web");
    staticHandler.setHandler(resourceHandler);

    RewriteHandler rewriteHandler = new RewriteHandler();
    rewriteHandler.setRewriteRequestURI(true);
    rewriteHandler.setRewritePathInfo(false);
    RewritePatternRule redirect = new RewritePatternRule();
    redirect.setPattern("^/?$");
    redirect.setReplacement("/web");
    rewriteHandler.addRule(redirect);
    rewriteHandler.setHandler(resourceHandler);

    HandlerList handlers = new HandlerList();
    handlers.setHandlers(new Handler[] { servletHandler, staticHandler, rewriteHandler  });

    jetty.setHandler(handlers);
John
  • 31
  • 3

1 Answers1

0

Put RewriteHandler first.

And don't mix ServletContextHandler and ResourceHandler.

See https://stackoverflow.com/a/28419106/775715 and https://stackoverflow.com/a/34277268/775715

Community
  • 1
  • 1
Joakim Erdfelt
  • 41,193
  • 5
  • 78
  • 124