如何保留baseURL中.com后的路径与参数实现完整URL跳转
问题原因
绝大多数请求库、路由框架内置的baseURL解析逻辑,只会提取URL中的源(协议+域名+端口)作为基准地址,域名后的路径、查询参数不属于基准源范畴,会被自动过滤截断,这也是你配置的地址被截断为https://www.aaa.com的核心原因。
额外提醒:JS代码中不要写HTML转义字符
&,直接使用&连接查询参数即可,否则会出现参数名带amp;的解析异常。
可落地实现方案
- 拆分配置手动拼接
不要把固定路径、公共查询参数塞到baseURL字段里,拆分存储后在跳转、发请求时手动拼接,这是兼容性最好、最符合框架设计逻辑的方案:// 基准域名单独存在baseURL字段,适配库的默认解析逻辑 const baseURL = 'https://www.aaa.com' // 固定前缀路径 const fixedPath = '/CPC/' // 公共查询参数 const commonQuery = { agentcode: '123', hotelcode: '123' } // 跳转/请求时拼接完整地址 const jumpUrl = `${baseURL}${fixedPath}?${new URLSearchParams(commonQuery).toString()}` // 后续如果要加其他子路径、额外参数,直接在这个基础上追加即可 - 拦截取值逻辑绕过内置解析
如果你用的工具支持拦截器、自定义配置解析逻辑,可以直接绕过内置的baseURL截断规则,读取你配置的原始完整字符串:// 以axios请求库为例 const reqInstance = axios.create({ baseURL: 'https://www.aaa.com/CPC/?agentcode=123&hotelcode=123' }) // 请求拦截器里手动拼接地址,清空baseURL跳过内置解析逻辑 reqInstance.interceptors.request.use(config => { config.url = `${config.baseURL}${config.url.startsWith('/') ? config.url.slice(1) : config.url}` config.baseURL = '' return config }) - 自定义常量直接存储完整地址
如果你不需要基于baseURL拼接其他相对路径,所有跳转、请求都固定用这个完整地址,完全可以不用框架/库提供的baseURL字段,自己定义一个常量存完整地址,调用时直接取值即可:const FULL_JUMP_URL = 'https://www.aaa.com/CPC/?agentcode=123&hotelcode=123' // 页面跳转直接使用 window.location.href = FULL_JUMP_URL
内容的提问来源于stack exchange,提问作者Vladeezy
相关产品推荐
相关产品推荐

