Dva: 项目打包部署到服务器后路由无效

Created on 21 Apr 2017  ·  2Comments  ·  Source: dvajs/dva

在本地npm start后可以访问,部署到服务器后,就不能访问了
我在segmentfault看到Angular是因为
打包后成了静态文件,服务器会根据路径寻找文件,找不到就404
https://segmentfault.com/q/1010000007934408

想问下这个有什么解决办法吗

服务器使用的CentOS+Nginx

Most helpful comment

已解决:
首先,在Nginx的配置文件nginx.conf(CentOS中我安装在/usr/local/nginx/conf/下)中新键一个虚拟主机server。其实就是在一个文件中加一小段代码
配置如下:
参考:Nginx配置文件简单教程

server {
        listen       80;
        server_name  ***.com; #虚拟主机名字,对应域名或IP
        root     /data/site/projectname;#项目存放的根路径
        location / {
            try_files $uri $uri/ /index.html =404; #这里一定要设置
        }
    }

这里的location是必须的,因为是单页面应用,所有的*.com下的请求都重定向到index.html去处理。

服务器设置完成后,项目中还有需要注意的地方
目前我遇到两点
1、项目的index.css文件是相对路径
2、因为我自己需求,在进入url对应页面时需要改变某些model的state来展示不同的页面内容,所以需要先发起dispatch请求来预设state值,而某些项目是动态加载模块,dispatch所需要的模块还没被加载,所以无法发起dispatch,但这在开发环境中是不受影响的。然而在生产环境中却不行。
自己的项目演示地址:http://wuyunjiang.cn
总结:其实是通过反向代理的方式,将域名下所有的请求都重定向到index.html,再用index.js来处理
可能有些地方理解有问题,请指出,谢谢

All 2 comments

已解决:
首先,在Nginx的配置文件nginx.conf(CentOS中我安装在/usr/local/nginx/conf/下)中新键一个虚拟主机server。其实就是在一个文件中加一小段代码
配置如下:
参考:Nginx配置文件简单教程

server {
        listen       80;
        server_name  ***.com; #虚拟主机名字,对应域名或IP
        root     /data/site/projectname;#项目存放的根路径
        location / {
            try_files $uri $uri/ /index.html =404; #这里一定要设置
        }
    }

这里的location是必须的,因为是单页面应用,所有的*.com下的请求都重定向到index.html去处理。

服务器设置完成后,项目中还有需要注意的地方
目前我遇到两点
1、项目的index.css文件是相对路径
2、因为我自己需求,在进入url对应页面时需要改变某些model的state来展示不同的页面内容,所以需要先发起dispatch请求来预设state值,而某些项目是动态加载模块,dispatch所需要的模块还没被加载,所以无法发起dispatch,但这在开发环境中是不受影响的。然而在生产环境中却不行。
自己的项目演示地址:http://wuyunjiang.cn
总结:其实是通过反向代理的方式,将域名下所有的请求都重定向到index.html,再用index.js来处理
可能有些地方理解有问题,请指出,谢谢

已解决:
首先,在Nginx的配置文件nginx.conf(CentOS中我安装在/usr/local/nginx/conf/下)中新键一个虚拟主机server。其实就是在一个文件中加一小段代码
配置如下:
参考:Nginx配置文件简单教程

server {
        listen       80;
        server_name  ***.com; #虚拟主机名字,对应域名或IP
        root     /data/site/projectname;#项目存放的根路径
        location / {
            try_files $uri $uri/ /index.html =404; #这里一定要设置
        }
    }

这里的location是必须的,因为是单页面应用,所有的*.com下的请求都重定向到index.html去处理。

服务器设置完成后,项目中还有需要注意的地方
目前我遇到两点
1、项目的index.css文件是相对路径
2、因为我自己需求,在进入url对应页面时需要改变某些model的state来展示不同的页面内容,所以需要先发起dispatch请求来预设state值,而某些项目是动态加载模块,dispatch所需要的模块还没被加载,所以无法发起dispatch,但这在开发环境中是不受影响的。然而在生产环境中却不行。
自己的项目演示地址:http://wuyunjiang.cn
总结:其实是通过反向代理的方式,将域名下所有的请求都重定向到index.html,再用index.js来处理
可能有些地方理解有问题,请指出,谢谢

那请问你怎么解决问题1的呢

Was this page helpful?
0 / 5 - 0 ratings