事情是这样的:我在技术群里接了个小需求:


老板购买的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多的一天呢~