有个react写的SPA,npm start运行项目的时候起的本地服务器,进入项目,再点击进入详情页,通过路由切换,访问的是这个页面,http://192.168.0.110:3002/det...刷新后还是这个页面。
但是我一打包后,放到服务器根目录下,进入项目,进入详情页,都没问题,但是刷新后显示404。
就是因为打包后根目录就一个index.html文件,找不到那个detail文件了。我现在想实现服务器上刷新页面还是停留在当页,有办法解决吗?难道单页面应用不能刷新??
有个react写的SPA,npm start运行项目的时候起的本地服务器,进入项目,再点击进入详情页,通过路由切换,访问的是这个页面,http://192.168.0.110:3002/det...刷新后还是这个页面。
但是我一打包后,放到服务器根目录下,进入项目,进入详情页,都没问题,但是刷新后显示404。
就是因为打包后根目录就一个index.html文件,找不到那个detail文件了。我现在想实现服务器上刷新页面还是停留在当页,有办法解决吗?难道单页面应用不能刷新??
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
谢邀!
单页面应用应该放到nginx或者apache、tomcat等web代理服务器中,
同时要根据 自己服务器的项目路径 更改react的路由地址。如果说项目是直接跟在域名后面的,比如:http://www.sosout.com ,根路由就是 '/'。
如果说项目是直接跟在域名后面的一个子目录中的,比如:http://www.sosout.com/children ,根路由就是 '/children ',不能直接访问index.html。
以配置Nginx为例,配置过程大致如下:
(假设:
1、项目文件目录: /mnt/html/reactAntd(reactAntd目录下的文件就是执行了npm run dist 后生成的antd目录下的文件)
2、访问域名:antd.sosout.com)
进入nginx.conf新增如下配置:
注意事项:
1、配置域名的话,需要80端口,成功后,只要访问域名即可访问的项目
2、如果你使用了react-router的browserHistory 模式,在nginx配置还需要重写路由:
为什么要重写路由?
因为我们的项目只有一个根入口,当输入类似/home的url时,如果找不到对应的页面,nginx会尝试加载index.html,这是通过react-router就能正确的匹配我们输入的/home路由,从而显示正确的home页面,如果browserHistory模式的项目没有配置上述内容,会出现404的情况。