事情是这样的:我在技术群里接了个小需求:
老板购买的crmeb多商户商城,按照官网文档部署并安装完毕了,
现在直接访问域名是会看到H5的商城界面(如输入:www.xxx.com会显示商城首页),
在域名后面输入admin会进入后台管理界面(如:www.xxx.com/admin)。
其实这时候对于大部分的应用场景已经够用,不需要对域名再更改什么。
但是老板有个要求是 输入域名后要跳转到后台管理(如:www.xxx.com是进后台的),
域名后加“/h5”进商城首页(如:www.xxx.com/h5才是进商城首页的),然后就附带界面的一些文字的小改动。
我一听,这不难啊,就以极低的价格接下了这一单生意。
达成合作共识之后,老板直接甩给我一个crmeb多商户二开文档。
我心想这还用看文档?分分钟的事啊!
然而一个小时后,我崩溃了。
他喵的居然是用swoole开的服务,nginx做的反代出来的,核心代码还加密了,啊这。。。头一回搞啊。
本着 我是程序猿,不会被任何事情难倒的 信念(并不是,主要是没钱)。
我硬着头皮开始一点点的读文档,才感觉这个文档像是提供给非程序员看的,傻瓜式的,对于整体的原理方面讲的比较浅(对于这个问题没啥卵用),(偷偷地:也可能是我学艺不精)。
就在我放弃官方文档时,突然想到,是不是可以直接在前端入口文件上加上个跳转判断。根据路径判断跳转啊,多简单粗暴!咋才想到!
如果路径后面带有/h5,那么就跳转到www.xxx.com并且加上一个小参数,如果用户直接输入域名,那就没有那个参数,直接跳转到www.xxx.com/admin。
哈,这样我就不管你代码和架构了,直接在入口文件上干掉你。
自测通过没问题,给客户交货!
然而,这种方式的弊端就是,用户在进入首页后,由于网络延迟等原因,会先显示首页,再重定向到后台。
客户一眼就看穿了这种效果不太好的做法,要求直接进入,不能跳转,至少不能明显看出来嘛!
既然这样不行,那我再加个反代,把/h5代到www.xxx.com上,是不是就好得多呢?
location ^~ /h5 {
proxy_pass https://www.xxx.com/?c; ## c是我随机加的一个参数后缀,目的是让下述重定向判断起作用。
}
然后把域名在nginx层就重定向到后台路由
if ($request_uri = "/"){
rewrite ^(.*)$ https://www.xxx.com/admin permanent;
}
理论上这样应该没问题了吧。
但是在自测过程中我又发现了一个问题,在pc浏览器上输入 www.xxx.com/h5是可以正常反代过来的。
然而到手机上就不行了。奇奇怪怪。
页面也没报错,请求的js、css、图片文件和接口都正常,pc上的h5也都正常显示,怎么在手机上的h5就显示空白了呢?
感觉是入口文件请求的js里的js又请求了一些东西,现在只是单纯的执行或者只返回了第一层js,嵌套的其它的代码没有被完全执行,导致很多其他的核心js文件没有被下载访问。
所以没有报错,页面也就是白板。
而且肯定是我加的那个反代的问题。
那会不会是uni-app打包时不是用的hash,而由于反代的原因导致路由乱套了?
果然,重新用hash打包替换,问题解决。
现在的效果是
后台管理端的路径:www.xxx.com
商城h5端的路径:www.xxx.com/h5
又是钱少bug多的一天呢~