我正在使用 Jetty 部署 WebSocket 和 Angular 应用程序。在开发中,一切正常,但在生产中,我遇到了一个问题,当刷新前端或输入 url 时,我从服务器收到 404 消息,指出给定的资源不存在。现在我正在尝试创建重写规则以将请求重定向到我的index.html。初始化我的服务器如下所示:
server = new Server();
ServerConnector connector = new ServerConnector(server);
connector.setPort(config.getServer().getPort());
server.addConnector(connector);
RewriteHandler rewriteHandler = new RewriteHandler();
rewriteHandler.setRewriteRequestURI(true);
rewriteHandler.setRewritePathInfo(false);
rewriteHandler.setOriginalPathAttribute("requestedPath");
/*
RedirectRegexRule rule1 = new RedirectRegexRule();
rule1.setRegex("/(.+)");
rule1.setLocation("/index.html");
rewriteHandler.addRule(rule1);
*/
URL webRootLocation = this.getClass().getResource("/frontend/index.html");
if (webRootLocation == null)
throw new IllegalStateException("Unable to determine webroot URL location");
URI webRootUri = URI.create(webRootLocation.toURI().toASCIIString().replaceFirst("/index.html$","/"));
logger.debug("Web Root URI: {}",webRootUri);
ServletContextHandler contextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
contextHandler.setContextPath("/");
contextHandler.setBaseResource(Resource.newResource(webRootUri));
contextHandler.setWelcomeFiles(new String[]{ "index.html" });
rewriteHandler.setHandler(contextHandler);
ServerContainer container = WebSocketServerContainerInitializer.initialize(contextHandler);
List<Class<? extends Encoder>> encoders = new ArrayList<>();
encoders.add(MessageEncoder.class);
List<Class<? extends Decoder>> decoders = new ArrayList<>();
decoders.add(MessageDecoder.class);
我的 Angular 前端编译在应用程序的资源文件夹中,该文件夹由服务器提供服务 - 例如:localhost:8080/。如果我的应用程序路由到localhost:8080/some/path一切都很好,但刷新页面时我会收到some/path未知的 404。使用重写规则(注释掉)我ERR_TOO_MANY_REDIRECTIONS也得到了延迟加载的资源/模块未找到。关于如何对 Angular 应用程序使用 Jetty 重写的任何建议,因为我不知道如何继续这里,或者 Jetty 不支持Angular 部署建议的 apache 重写之类的东西
慕哥6287543
沧海一幻觉
相关分类