Github-使用自定义域时页面相关链接不起作用

Github-pages relative links not working when custom domain is used

我使用的 Github-pages 没有 Jekyll,只有 markdown .md 文件。

到 link 从那个 .md 到我的存储库中的某个文件夹 我正在使用相对 links.

为什么是相对的 link?我使用的是 link 之类的绝对 https://github.com/USER_NAME/REPO_NAME/blob/master/FOLDER_NAME,但后来我更改了我的回购名称,每个 link 都停止工作了。

这就是我移至相对 link 的原因,但后来当我检查页面在自定义域下的工作方式时 -> 每个 link 都停止工作。

通过 "stopped" 工作我的意思是:现在当我去 www.CUSTOM_DOMAIN。com/REPO_NAME/FOLDER_NAME 我得到 404。



编辑 1:
当我试图为 编辑这个问题时,我意识到问题是不同的: - links 到文件工作正常 - 但文件夹的 links 不起作用,即 REPO_NAME 未添加到 URI,应该有:

www.CUSTOM_DOMAIN.com/REPO_NAME/FOLDER_NAME

而实际上有:

www.CUSTOM_DOMAIN.com/FOLDER_NAME.

所以我的回购看起来像这样:

REPO_NAME/
├── README.md
├── FOLDER_NAME/
│   ├── FOLDERFILE.md

所以我的 README.md 中的 link 是 (NOK):

[some string for folder](/FOLDER_NAME)
(which is unwrapped by github-pages-engine to)
www.CUSTOM_DOMAIN.com/FOLDER_NAME

当我 link 到一个文件时它工作正常,像这样 (OK):

[some string for file](/FOLDER_NAME/FOLDERFILE.md)
(which is unwrapped by github-pages-engine to)
www.CUSTOM_DOMAIN.com/REPO_NAME/FOLDER_NAME.html



编辑 2:
我要修复的页面不是 organization/user 页面,因此路径中应该有 REPO_NAME。



编辑 3:
我更改了 links 以删除前导斜杠,但它们仍然不起作用。现在 link 在我的 README.md 中是 (NOK):

[some string for folder](FOLDER_NAME/)
(which is unwrapped by github-pages-engine to)
www.CUSTOM_DOMAIN.com/REPO_NAME/FOLDER_NAME

或(也为挪威克朗):

[some string for folder](./FOLDER_NAME/)
(which is unwrapped by github-pages-engine to)
www.CUSTOM_DOMAIN.com/REPO_NAME/FOLDER_NAME

你有两个问题:

  1. 您没有使用相对 URLs。
  2. 您没有考虑服务器根与自定义域的不同。

亲戚URLs

相对 URL 是相对于当前位置的路径。但是,以斜杠开头的 URL 与当前位置无关。开头的斜杠表示从服务器根目录开始的路径。换句话说,对于 "normalize" 和 URL,只需在域前加上。

因此,对于相对于当前位置的 link,它不能以斜杠开头。使用您的示例结构,FOLDERFILE.md 文件中的任何 links 将如下所示:

[REPO_NAME](../)          <= step back one directory
[README.md](../README.md) <= step back one directory
[FOLDER_NAME](./)         <= the current directory

README.md 文件中的任何 link 都将如下所示

[REPO_NAME](./)
[FOLDER_NAME](FOLDER_NAME/)
[FOLDERFILE.md](FOLDER_NAME/FOLDERFILE.md)

如果有帮助,您可以使用当前目录 (./) 启动所有 URL。虽然没有必要,但有些人发现它更具可读性。在这种情况下,README.md 文件将如下所示

[REPO_NAME](./)
[FOLDER_NAME](./FOLDER_NAME/)
[FOLDERFILE.md](./FOLDER_NAME/FOLDERFILE.md)

服务器根目录

了解服务器根目录和站点根目录之间的区别很重要。当它们相同时,绝对 links 可以正常工作。但是,当它们不同时,只有真正的相对 links 才能在两者之间工作。

当您使用 GitHub 提供的域设置 GitHub 页面时,您的站点托管在 https://USERNAME.github.io/REPO_NAME。在这种情况下,服务器根目录位于 USERNAME.github.io/,这就是 / 指向的位置。但是,您站点的根位于子目录 /REPO_NAME 中。因此,要使绝对 URL 起作用,必须在其中包含 /REPO_NAME/

但是,当您设置自定义域时,服务器根目录和站点根目录位于同一位置:https://example.com/。没有 REPO_NAME 子目录。 REPO_NAME 的内容位于 /.

为了说明,以下 URL 指向相同的位置,具体取决于您使用的是 GitHub 域还是自定义域。

GitHub Domain                        | Custom Domain
------------------------------------ | --------------------------
/REPO_NAME/                          | /
/REPO_NAME/README.md                 | /README.md
/REPO_NAME/FOLDER_NAME/              | /FOLDER_NAME/
/REPO_NAME/FOLDER_NAME/FOLDERFILE.md | /FOLDER_NAME/FOLDERFILE.md

而这种差异就是为什么您需要使用真正的相对 URLS - URLs 不以 /.

开头