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

时间:2018-06-11 13:00:34

标签: http-status-code-404 markdown github-pages relative-path github-flavored-markdown

我正在使用没有Jekyll的Github页面,只有简单的markdown .md文件。

要从.md链接到我的仓库中的某个文件夹,我正在使用相对链接。

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

这就是为什么我转移到相对链接,但当我检查页面在自定义域下的工作方式时 - >每个链接都停止工作。

“停止”工作我的意思是:现在当我去www.CUSTOM_DOMAIN.com/REPO_NAME/FOLDER_NAME时,我收到了404.



编辑1:
当我尝试为this comment编辑此问题时,我意识到问题不同: - 文件链接工作正常 - 但是文件夹的链接不起作用,即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中的链接是(NOK):

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

当我链接到文件时它工作正常,就像这样(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:
我正在尝试修复的页面不是组织/用户页面,因此它应该在路径中包含REPO_NAME。



编辑3:
我更改了链接以删除前导斜杠,但它们仍然不起作用。现在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

或(也是NOK):

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

1 个答案:

答案 0 :(得分:1)

你有两个问题:

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

    相对URL是相对于当前位置的路径。但是,以斜杠开头的URL与当前位置无关。左斜杠表示来自服务器根目录的路径。换句话说,"标准化" URL,只是前置域。

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

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

    README.md文件中的所有链接都显示为&#34;

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

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

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

    服务器根目录

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

    使用GitHub提供的域设置GitHub页面时,您的站点位于https://USERNAME.github.io/REPO_NAME。在这种情况下,服务器根位于USERNAME.github.io//指向的位置。但是,您网站的根位于子目录/REPO_NAME中。因此,要使绝对网址有效,必须在其中加入/REPO_NAME/

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

    为了说明,以下网址指向相同的位置,具体取决于您使用的是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 - 不以/开头的URL。