如果资源未解析,Spring Boot 2.1.0仅提供index.html(SPA,react-router)

Rob*_*ham 7 spring-mvc single-page-application reactjs spring-boot react-router

我正在使用带有此配置的Spring Boot 2.1.0使用create-react-app和react-router制作SPA

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/**/{path:[^\\.]+}")
                .setViewName("forward:/");
    }
}
Run Code Online (Sandbox Code Playgroud)

基本上它的作用始终是index.html,除非路径中有一段时间.我想将其与create-react-app提供的一致.htaccess.如何使Spring Boot与此功能相匹配?

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
Run Code Online (Sandbox Code Playgroud)

pco*_*tes 3

要将“404:找不到文件”重新路由到“forward:/”(我认为这就是 .htaccess 的作用),请将您的 WebMvcConfiguration 更改为...

@Configuration
public class WebMvcConfiguration implements ErrorViewResolver
{

    @Override
    public ModelAndView resolveErrorView(HttpServletRequest request, HttpStatus status, Map<String, Object> model) {
        if (status == HttpStatus.NOT_FOUND) {
            return new ModelAndView("forward:/");
        }
        return null;
    }

}
Run Code Online (Sandbox Code Playgroud)