当前位置: 首页 > 后端技术 > PHP

Laravel+vue实现历史模式URL可行方案

时间:2023-03-29 22:57:18 PHP

项目:laravel+vue实现前后端分离。Vue-router默认的hash模式——使用URL的hash来模拟一个完整的URL,所以当URL改变时,页面不会重新加载。哈希URL例如:http://yoursite.com/#/user/id。在历史记录模式下,URL就像一个普通的url,例如http://yoursite.com/user/id。如果没有特殊要求,hash方式也可以正常访问。好吧,该产品要求URL与正常情况一样-在历史记录模式下。查看vue文档,实现vue历史模式也很简单。vue切换模式,本地测试ok。接下来看到还需要后台配置支持:因为VUE应用是单页客户端应用,如果后台配置不正确,当用户直接访问http://oursite.com/user/id时浏览器,它将返回404,这不是很漂亮。所以,你需要在服务器端添加一个涵盖所有情况的候选资源:如果URL没有匹配到任何静态资源,它应该返回相同的index.html页面,也就是你的应用所依赖的页面。所以,配置Nginx:location/{try_files$uri$uri//index.html;}没错,在Nginx服务器上部署前端资源,只需要添加一个通用的匹配规则即可。至此,vue前端就搞定了,但是。..还是行不通!原因是前端服务器访问是正常的,但是域名指向后端服务器,所以直接访问vue-routerhistorymodeurl时,还是会404。到了这里,回去检查一下之前是不是写错了,仔细看看,没有问题,按照vue文档中的说明操作即可。想了想,找到了思路:404是后端上报的,也就是说是Laravel给的,而laravelrouter根本就没有前端定义的路由。于是我立马想到,要不要在response发出前打断laravel的异常处理,将404处理交给前端进一步处理,那么只需要在app/中的render方法中添加判断即可异常/处理程序:/***将异常呈现到HTTP响应中。**@param\Illuminate\Http\Request$request*@param\Exception$exception*@return\Illuminate\Http\Response*/publicfunctionrender($request,Exception$exception){//解决vuehistory的问题地址丢失}}返回parent::render($request,$exception);}说明:welcome是加载vueCSS和JS,即vue依赖文件。以上已经解决了前后端分离,vuehistory404问题!