使用location.href跳转时为何会在路径参数前自动添加斜杠?
路径自动补全斜杠的原因
这个行为并非JavaScript主动添加,本质是Web服务端的目录规范化重定向规则触发的,完整逻辑如下:
- 你给
location.href赋值的databases?page=settings属于相对路径,浏览器会先根据当前页面的基准URL拼接出完整的初始请求地址,比如当前页面在域名根路径下时,拼接后的地址为https://你的域名/databases?page=settings - 服务端收到请求后,会检测到
databases是实际存在的目录,而非单个文件。Nginx、Apache等主流Web服务默认都开启了目录标准化规则:如果请求路径对应存在的目录且末尾未加斜杠,会自动返回301/302重定向响应,将路径末尾补充斜杠后跳转,同时保留原有查询参数,因此最终地址变为/databases/?page=settings - 整个重定向是服务端返回响应后浏览器自动执行的,和JavaScript的赋值逻辑没有关系,你可以在浏览器开发者工具的「网络」面板看到两次请求记录:第一次是代码触发的不带斜杠的请求,第二次是服务端引导的带斜杠的跳转请求
规避方案
如果要避免多余的重定向,直接在代码中给目录路径末尾补全斜杠即可:location.href = "databases/?page=settings";
内容的提问来源于stack exchange,提问作者scharez
相关产品推荐
相关产品推荐

