为了上新项目,搭了个新框架,为了新框架换了新前端UI。 前端是基于vue的,开发环境看起来一切都很正常很美好~ 然而到生产环境后,一下子跑出了很多404的报错。原来,生产环境上还要针对router做url rewrite……
Jexus的rewrite
jexus是做跨平台开发的.neter非常钟爱的Web服务,支持对站点配置,写正则表达式做url rewrite。然而,实际上我们并不用那么麻烦,直接使用NoFile
配置选项即可。
NoFile=index.html
究其原理,是将找不到实际路径的url,直接转发到所配置的URL地址。 完美解决了我的需求!
Nginx的rewrite
Nginx也是常有的Web服务器,而且用户众多,教程俯首皆是。随便搜索一下,就能找到解决方案。我也是从“某度”得到了以下的方案,并实践成功。
server {
listen 80;
server_name localhost;
#access_log logs/host.access.log main;
root /var/www/vue/my_project/dist; #vue项目的打包后的dist
location / {
try_files $uri $uri/ @router;#需要指向下面的@router否则会出现vue的路由在nginx中刷新出现404
index index.html index.htm;
}
#对应上面的@router,主要原因是路由的路径资源并不是一个真实的路径,所以无法找到具体的文件
#因此需要rewrite到index.html中,然后交给路由在处理请求资源
location @router {
rewrite ^.*$ /index.html last;
}
}