React路由之BrowserRouter页面刷新报错,nginx服务器的配置问题

react单页面项目使用BrowserRouter路由时,对处于二级或多级路由状态的页面进行刷新,路由会被发送到服务器,此时,就需要在服务器端进行配置,将路由重定向到项目的唯一页面index.html,否则会报错404。

若使用nginx来充当服务器,需要添加以下配置

server {
    listen  3000;
    server_name  localhost;
    location / {
       root   html/project;
       index  index.html;
	   gzip_static on; #静态压缩
	   #路由重定向配置
		try_files $uri $uri/ /index.html;
    }
	#配置访问后台接口代理
	location  /project {
         proxy_pass   http://127.0.0.1:13000/project;
    }
}

此时还有一个问题需要注意,如果nginx既充当服务器,又充当前后端分离的代理服务器时,有可能会发生以下情况:
路由的前缀与请求后台的前缀一致的情况

比如后台接口路径为/project/getDic,而菜单路由为/projectItem/dicManagement,此时,根据nginx的location匹配原则,路由也匹配到了“/project”对应的location,此时进行二级路由的刷新也会报错404,因为将路由也代理到了后台服务器,而后台服务器没有对应的Controller进行处理。
遇到以上情况时需要对“/project”对应的location进行修改,可以修改为:

location  /project/ {
    proxy_pass   http://127.0.0.1:13000/project/;
}

具体的修改方案需要根据自己的路由和接口路径而定,这里的方案只是针对我自己的项目进行的修改。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐