1
sleepm 2020-02-26 23:43:02 +08:00 via Android 1
直接改打包好的代码里的 baseUrl。。
|
2
clf 2020-02-26 23:59:04 +08:00 1
你说的哪个 baseUrl……是网络请求库的 baseUrl 还是 Vue build 生成文件时的 baseUrl 还是啥?
baseUrl 原来的值大致是怎么样的(如果有 IP 或域名就用`IP 地址`或`域名`代替,也不会泄露) 原来 Vue 前端路由是怎么样配置的 现在网站要求的大致结构层级是怎么样的 求助的时候麻烦交代清楚这些问题……不然我除了吃瓜也不知道回复你什么。 |
3
Beebird 2020-02-27 00:00:22 +08:00
不懂 vue,但理论上 nginx 的 rewrite 应该可以做到啊,楼主讲得太简略了不好判断。
|
4
rockyou12 2020-02-27 00:02:44 +08:00
难道你 vue 源码还能吧 baseUrl 写死 ip 嘛,不然应该随便改的
|
5
fniy 2020-02-27 00:16:45 +08:00
|
6
airyland 2020-02-27 00:31:22 +08:00
源码没了你搜索到相关位置不也可以改。
|
8
badtypea OP @lychs1998 哈,不好意思,因为找不到以前负责的人我也不知道原来值是什么。原项目是 8.8.8.8 (举例)直接访问 vue 项目,现在客户是要求加个首页,首页用 8.8.8.8 访问,然后首页能跳转 8.8.8.8/example 下访问 vue。我虽然在 nginx 配置了 8.8.8.8/example 但却 vue 页面却是空白的,只能查到要改 bulid 时 vue.config.js 的 baseUrl,但没源码就很无语...
|
10
ss098 2020-02-27 01:02:22 +08:00 1
Vue 提供的模板是默认部署到根目录的,如果你可以访问 example 而页面空白,我推测是页面所需的资源文件仍以根目录请求。
你可以试试添加 HTML base 标签指定资源目录为 example。 |
11
asmoker 2020-02-27 01:10:45 +08:00 via Android
是不是需要加 tryfiles ?
加了一级目录,但是原项目静态资源路径应该还是根的,根据把静态资源再单独处理下。 |
12
badtypea OP @ss098 多谢提醒,想起来 example 页面的 index.html 之前是无法读取同目录下 css、js 目录的文件的,我把这些目录移到根目录下控制台才没报错,但是却一片空白。base 标签没用过,貌似无法直接根据目录找到资源...
|
14
badtypea OP server {
listen 80; # 新增首页 location / { alias /zh-helper/; try_files $uri $uri/ /index.html last; } # 后台项目 location /zh-admin { alias /zh-helper/zhanheng-funding-helper-admin/dist/; try_files $uri $uri/ /index.html last; } # 后台项目 location /example{ # proxy_pass http://zhanheng-funding-helper.oss-cn-shenzhen.aliyuncs.com; # proxy_hide_header Content-Disposition; alias /zh-helper/zhanheng-funding-helper/dist/; try_files $uri $uri/ /index.html; } |
15
sodatea 2020-02-27 01:37:38 +08:00 1
在编译后的代码里找 l.p="/" 然后替换掉引号里的内容。
|
16
sodatea 2020-02-27 01:41:59 +08:00 1
如果用了 vue-router 的话那编译后的代码里应该还有一处 base:"/" 也替换掉
|
17
inpro 2020-02-27 01:42:41 +08:00 via iPhone 1
这个如果可以找到 Vue 打包后的 publicPath 可解,看了下这个值可能是 “”,就比较麻烦了,只配置 nginx,即使 /example 访问到了 Vue,Vue Router 也会将 /example 看作是 Vue 内部路由而显示白屏。倒是有个变通的办法,如果不要求一定是 /example 的话,可以将 / 配置为首页,当访问 / 时,检测有没有带 frontpage_loaded 这个 Cookie,如果没有(客户首次访问),返回首页,如果有,返回 Vue。首页跳转 Vue 的按钮在点击时设置这个 Cookie,并跳转 /?任意查询字符串,nginx 监测到 Cookie 返回 Vue,这个方案的缺点是 1 需要 Cookie 支持 2 客户只会看到一次首页,下次访问首页时看到的是 Vue
|
21
badtypea OP @sodatea 多谢老哥!可以了,这我真的是人傻了,改的是原目录的,一下子没想起来现在读取的是我自己放到根目录的 JS 文件。终于可以安心合眼了,感谢!
|
22
also24 2020-02-27 02:36:43 +08:00 1
先把 『一片空白』的原因搞清楚再去折腾 nginx。
不要改 nginx,直接把整个前端项目先丢进子目录; Chrome 打开开发者模式,访问相应子目录页面; 清缓存,刷新页面,查看 network 标签。 此时着重观察: 1、有多少静态资源出错,出错的原因是域名不一致还是路径问题? 2、有多少 xhr 请求出错,出错的原因是域名不一致还是路径问题? 先把以上问题搞清楚,再继续下一步。 在整个前端项目里,全局搜索相应的 域名( IP )/接口 ,寻找已被编译的配置文件或死代码。 根据前面观察的结果,进行针对性修改。 |
23
badtypea OP @also24 嗯,这下已经都清楚了,一片空白就是因为没法设置 baseUrl 为 "/example",能找到打包后改的位置就可以了,一般也没我这么惨连源码都没...虽然此贴已结,这么晚了还帮忙分析多谢啦。
|
25
also24 2020-02-27 02:47:35 +08:00 1
补充一下,如果 baseurl 配置为 "/" 可能会遇到匹配太多导致无法搜索的情况。
此时还有一个方法就是 Chrome 控制台内,对每一个 xhr 请求都有相应的 js 调用链,可以通过跟踪这个调用链找出 URL 是在什么地方拼接的。 |