ThinkPHP5.1+Vue history模式路由问题:
Vue使用history路由模式,打包以后,将dist目录中的文件放置到public目录中后产生下面问题:
后端要求定位到index.php
www.test.com/index/index/index
对于后端,相当于访问www.test.com/index.php/index/index/index
入口文件是index.php
前端要求定位到index.html
history 风格的vue路由刷新 www.test.com/index/index/index
对于前端hash风格路由,相当于www.test.com/#/index/index/index
打包部署后,入口文件是是index.html
问题前提条件: 后端服务器转发设置,找不到文件或目录,就转发到index.php
问题的具体体现:F5刷新www.test.com/index/index/index 报404 not found 错误(原因ThinkPHP下确实无该方法)
解决方式1:使用apache 的ErrorDocument 404 “index.html” 设置,想要实现404就转发到index.html 实现失败
解决方式2:Thinkphp5.1在app.php配置文件中添加以下配置:(实现不理想)
'http_exception_template' =>
[
404 => Env::get('app_path') . '../public/index.html',
],
刷新后,F5刷新正常显示,但是缺点1:还是显示404码,不是想要的200码
缺点2:先请求后端,失败,才能转发前端。不符合理想实现。
理想实现:对于F5刷新,先直接找前端index.html,没找到,然后再找后端index.php,应该是通过Appache转发实现。
目前想到的较好方案:若前端添加 base: ‘/static’,相当于加长了路由,再在转发的时候,以/static为条件设置这种情况转发到index.html,否者转发到index.php,不理想之处:加长了路由
求教一个更优秀的,使用一个端口的解决方式。
后续和别人请教,说用两个端口解决,前端用一个端口,转发到index.html 后端用一个端口,转发到index.php