【问题标题】:Trailing slashes in Jekyll + GitHub Pages site cause 404Jekyll + GitHub Pages 站点中的斜杠导致 404
【发布时间】:2019-02-16 21:05:05
【问题描述】:

我希望在我的网站上解析以下所有 URL,该网站使用 Jekyll 构建并托管在 GitHub Pages 上:

在本地它们都可以正常工作,但现在在实时站点上,第一个和第三个选项已解决,但带有尾部斜杠的中间选项会导致 404 错误。

我目前没有使用永久链接。当我permalink: /about/ 添加到页面的最前面时,斜杠问题已解决,但随后about.html 会执行404。我想这比当前的行为要好,但我会如果所有三个选项都单独工作或重定向到一个,则更喜欢。

如果相关,我会在布局模板的 <head> 中设置规范引用,如下所示:

<link rel="canonical" href="{{ site.url }}{{ page.url | replace:'index.html',''}}">

这是我的_site 的文件树:

【问题讨论】:

    标签: url yaml jekyll config github-pages


    【解决方案1】:

    因此,如果您在本地构建站点时查看生成的_site 文件夹,您会看到应该有以下内容:

    _site
      |--about
      |   |--index.html
      |   |
    ...
    

    使用/about/ 和末尾的/ 的永久链接意味着Jekyll 将创建about 文件夹,然后在里面创建index.html 页面。由于历史优先级,它被称为index.html。浏览器默认在没有要检索的特定文件时查找此页面。

    考虑到这一点,这三个选项中的每一个都会发生以下情况:

    1. /about:浏览器足够聪明,知道插入尾随/,因此会查看/about/ 文件夹。您没有指定要查找的特定文件,因此默认为查找index.html。它找到index.html 并呈现它。
    2. /about/:同上。它在/about/ 文件夹中查找。由于没有指定特定文件,它会查找index.html。它找到index.html 并渲染它。
    3. /about.html:浏览器正在专门寻找位于根文件夹中的名为about.html 的文件。 /about/index.html 在那里,但这不是浏览器正在寻找的。 about.html 不存在,这就是它抛出 404 的原因。

    所以,没有错误。这就是当您在 url 中给它尾随 / 时浏览器的行为方式。

    【讨论】:

    • 这是很好的信息,谢谢。澄清一下,目前我根本没有使用任何永久链接。我的问题不是关于永久链接的正确使用或期望,而是如何让 URL 可能的所有场景(没有斜杠,是的斜杠和 .html 扩展名)工作或重定向到一个。这可能涉及永久链接,也可能不涉及;对我来说不是很重要。这似乎是一件很常见的事情,而且现在还没有发生。
    • 因为使用/about/ 固定链接可以使前两个方案发挥作用。将文件/about.html 添加到项目中并将其重定向到/about/ 在技术上将允许所有三种方案工作。所以,你需要/about/index.html/about.html,第二个重定向到第一个。您将拥有仅执行重定向的“空文件”,但它确实解决了您的问题。
    • 是的,我想过。我只是觉得 GitHub Pages 发生了其他事情,因为我觉得这是一个最近的问题,这样的解决方法不应该是必要的。感谢您的建议。
    【解决方案2】:

    已解决:遇到同样的问题并通过更新 _config.yml 中的永久链接设置来修复它

    在此处添加尾部斜杠。缺少尾部斜杠的 URL 将重定向到 /:name/

    https://jekyllrb.com/docs/permalinks/

    collections:
      my_collection:
        output: true
        permalink: /:collection/:name/
    

    【讨论】:

    • 这对我没有任何作用。但也完全有可能我不知道自己在做什么。
    【解决方案3】:

    根据 GitHub 的支持,这是 GitHub Pages 中的预期行为:

    你好迈克尔,

    感谢您就有关 GitHub 的问题联系 GitHub 支持 页面。

    目前无法更改我们的尾部斜杠行为 这一次,虽然我明白这样的情况可能是 很郁闷。

    我将与团队分享您的用例,以供日后考虑 改进。我不能说是否或何时会发生变化,但你的 反馈掌握在正确的人手中。

    谢谢,

    史蒂夫@slgraff GitHub 支持

    【讨论】:

    • 我 99% 确定这是一种回归,因为它以前可以工作。如:我在 2018 年 7 月从 Wordpress 迁移了一个网站,当时它可以工作,但现在不再工作了。
    • @oulenz 是的,我真的有点同意。
    猜你喜欢
    • 2017-05-28
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 2017-11-20
    • 2011-07-21
    • 2021-01-29
    • 1970-01-01
    • 2014-01-25
    相关资源
    最近更新 更多