某些项目的 GitLab Pages API 404 错误

GitLab Pages API 404 error for certain projects

我一直在编写自动化脚本来使用 Namesilo、Letsencrypt 和 Gitlab API 生成和更新 SSL 证书。 我快要结束了,但是在 Gitlab 上尝试更新 SSL 证书时出现 404 错误。

奇怪的是错误只发生在我的两个项目中的一个上。具体来说,运行:

curl --header "Private-Token: XXXXXX" "https://gitlab.com/api/v4/projects/pallavagarwal07%2Fshort-links/pages/domains/pallav.xyz"

工作正常并获取项目 short-links 中域 pallav.xyz 的详细信息。

但是,运行:

curl --header "Private-Token: XXXXX" "https://gitlab.com/api/v4/projects/pallavagarwal07%2Fpallavagarwal07.gitlab.io/pages/domains/varstack.com"

returns 404 错误。然而,更奇怪的是,如果我从 URL 中删除域名 varstack.com,它会按预期提供域列表:

curl --header "Private-Token: XXXXX" "https://gitlab.com/api/v4/projects/pallavagarwal07%2Fpallavagarwal07.gitlab.io/pages/domains"

returns:

[{"domain":"varstack.com","url":"https://varstack.com","certificate":....]

我终于弄明白了(尽管我仍然将其归类为 GitLab 的错误)。

ID 需要进行 url 编码,这就是我将存储库名称中的 / 替换为 %2F 的原因。但是字符 . 应该没有问题(前 URL 中的 - 没有引起任何问题)。但是,将 . 替换为 %2E 会给出预期的(正确的)结果。

我认为这是一个错误,因为:

  1. 此行为未记录(允许使用哪些字符?)。
  2. 没有域名的 URL 即使没有编码 . 也能完美工作,包括 API 添加新域(它也将域作为表单参数,而不是在URL).

TL;DR

使用:

pallavagarwal07%2Fpallavagarwal07%2Egitlab%2Eio

而不是

pallavagarwal07%2Fpallavagarwal07.gitlab.io

在 URL 中使它起作用。