2016-04-21 73 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}) 
相關問題