2016-04-21 72 views

回答

4

只是想分享我是如何做到的,希望它可以帮助别人: (SpringBoot 1.3.3,Angular2.beta15,angular2种子)

import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
import org.springframework.boot.builder.SpringApplicationBuilder; 
import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer; 
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer; 
import org.springframework.boot.context.embedded.ErrorPage; 
import org.springframework.boot.context.web.SpringBootServletInitializer; 
import org.springframework.context.annotation.Bean; 
import org.springframework.http.HttpStatus; 

@SpringBootApplication 
public class Application extends SpringBootServletInitializer { 

    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
     return application.sources(Application.class); 
    } 

    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 

    @Bean 
    public EmbeddedServletContainerCustomizer containerCustomizer(){ 
     return new Angular2PathLocationStrategyCustomizer(); 
    } 

    private static class Angular2PathLocationStrategyCustomizer implements EmbeddedServletContainerCustomizer { 
     @Override 
     public void customize(ConfigurableEmbeddedServletContainer container){ 
      container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/")); 
     } 
    } 
} 
+0

你只是将所有内容重定向到'/',对吧? – drewmoore

+0

jep,就像开发者快递服务器中间件一样:[require('connect-history-api-fallback')({index:'index.html'})] – Rob

+0

我们为spring应用程序定义了另一个基本url,比如localhost :8080/mybase,但仍然有效 – Rob

1

这些都是你需要遵循三个步骤:

  1. 实现自己TomcatEmbeddedServletContainerFactory的bean,并成立了RewriteValve

    import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; 
        ... 
        import org.apache.catalina.valves.rewrite.RewriteValve; 
        ... 
    
        @Bean TomcatEmbeddedServletContainerFactory servletContainerFactory() { 
        TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory(); 
        factory.setPort(8080); 
        factory.addContextValves(new RewriteValve()); 
        return factory; 
        } 
    
  2. 将rewrite.conf文件添加到应用程序的WEB-INF目录中,并指定重写规则。下面是一个rewrite.conf内容的示例,我在角度应用程序中使用它来利用角度的PathLocationStrategy(基本上我只是将所有内容都重定向到index.html,因为我们只是使用spring引导来提供静态Web内容):

    RewriteCond %{REQUEST_URI} !^.*\.(bmp|css|gif|htc|html?|ico|jpe?g|js|pdf|png|swf|txt|xml|svg|eot|woff|woff2|ttf|map)$ 
        RewriteRule ^(.*)$ /index.html [L] 
    
  3. 摆脱useHash的(或将其设置为false)从你的路由声明:

    RouterModule.forRoot(routes) 
    

 RouterModule.forRoot(routes, {useHash: false}) 
相关问题