You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

访问带尾斜杠的Gerrit登录页时静态图片返回401错误

Gerrit登录页带尾斜杠时Logo加载401 Unauthorized问题解决

环境概述

  • Gerrit部署在Debian 11虚拟机,路径/opt/gerrit/,以专属gerrit用户运行
  • 核心配置片段:
[gerrit]
    basePath = /opt/git
    canonicalWebUrl = http://192.168.10.101/git/
[httpd]
    listenUrl = proxy-http://127.0.0.1:8080/git/
[auth]
    type = LDAP
    gitBasicAuthPolicy = LDAP
  • Nginx反向代理配置遵循官方文档,监听git.mysite.com,将/git/路径代理到127.0.0.1:8080

问题现象

  • 访问http://192.168.10.101/git/login(不带尾斜杠)时,自定义登录页的Logo加载正常
  • 访问http://192.168.10.101/git/login/(带尾斜杠,如点击Gerrit内“Sign in”跳转的URL)时,Logo无法显示,浏览器控制台提示Error 401 Unauthorized
  • 请求差异:带尾斜杠时会发起login和logo.png两个GET请求,不带尾斜杠仅发起login请求

问题根源

浏览器对相对路径的解析逻辑差异导致:

  • 不带尾斜杠的/git/login被识别为文件路径,当前上下文为/git/,相对路径static/logo.png解析为/git/static/logo.png,匹配Gerrit静态资源的实际路径,无需额外认证即可加载
  • 带尾斜杠的/git/login/被识别为目录路径,当前上下文为/git/login/,相对路径static/logo.png解析为/git/login/static/logo.png,该路径不存在且触发Gerrit的LDAP认证拦截,返回401

解决方案

修改GerritSiteHeader.html中的图片路径为绝对路径,推荐两种方式:

方式一:硬编码根路径(适合固定部署路径)

<div>
    <img src="/git/static/logo.png" height="150" width="415"/>
</div>

方式二:使用Gerrit模板变量(适配动态部署路径,推荐)

利用Gerrit内置的$contextPath变量,它会自动匹配canonicalWebUrl中的路径后缀(此处为/git),无需硬编码:

<div>
    <img src="$contextPath/static/logo.png" height="150" width="415"/>
</div>

验证步骤

  1. 保存修改后的GerritSiteHeader.html
  2. 重启Gerrit服务:
sudo -u gerrit /opt/gerrit/bin/gerrit restart
  1. 清除浏览器缓存,测试带尾斜杠的登录URL,确认Logo正常加载
  2. 检查浏览器控制台,确认Logo的请求路径为/git/static/logo.png

内容的提问来源于stack exchange,提问作者Davide Ghisalberti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 12:22:46