保存侧边栏自定义链接时,如果外部 URL 的查询参数中包含站点自身的域名,该域名会被错误地从查询参数中剥离,从而破坏 URL。
重现步骤
- 进入侧边栏设置并添加/编辑自定义链接
- 将 URL 设置为一个外部 URL,该 URL 在查询参数中包含您站点的域名,例如一个指向您自己站点的 YouTube 重定向 URL
- 保存
预期行为
完整的 URL 会被保留,包括查询参数中的域名。
实际行为
站点的域名从查询参数中被剥离。例如,查询参数部分从 ?q=https://mysite.com/some-path/ 变为 ?q=/some-path/,从而产生一个被破坏的重定向 URL。
使用场景
我们的论坛(teskas.net,一个特斯拉车主社区)有一个侧边栏链接,使用 YouTube 重定向端点来触发特斯拉车载浏览器进入全屏模式。查询参数中必须包含我们的完整站点 URL(包括域名),重定向才能正常工作。
解决方法
对查询参数中的域名部分进行 URL 编码,然后直接写入数据库,绕过表单的标准化处理。
环境
- 自托管,Discourse v2026.3.0-latest