Hugo:在构建时添加 http-equiv="refresh" content="0。让它停下来?



我已经构建了一个非常小的Hugo站点,我正在尝试将其部署到Netlify。当我构建站点时,我得到了一个意想不到的无限循环,尽管它似乎在使用hugo serve --ignoreCache --disableFastRender --noHTTPCache -D的dev中工作。

该网站由两个页面组成:

  • /
  • /contact/

就联系人页面而言,它直接位于content文件夹中,如下所示:

---
title: "Contact"
draft: false
date: "2020-02-25"
type: "page"
layout: "page"
aliases:
- /contact.html
- /blog/contact/
- /blog/contact.html
---
{{< contactformwide >}}

然后我有themes/MYTHEME/layouts/shortcodes/contactformwide.html中的联系表格。

我有一个非常奇怪的错误,当我使用hugo serve --ignoreCache --disableFastRender --noHTTPCache -D构建网站时,它运行良好。当我尝试将它部署到netlify或使用hugo在本地构建它时,/contact/页面会陷入无限循环。构建时没有抛出任何错误,似乎只是一次又一次地加载页面,但都无济于事。

我曾尝试将config.yaml中的baseURL调整到适合生产的域,但这没有帮助。

/contact/渲染(以及重新渲染和重新渲染)的页面的HTML如下(这是Netlify的版本,因此是mellifluous-marzipan):

<!DOCTYPE html>
<html>
<head>
<title>https://mellifluous-marzipan-3893e2.netlify.app/contact/</title>
<link rel="canonical" href="https://mellifluous-marzipan-3893e2.netlify.app/contact/"/>
<meta name="robots" content="noindex">
<meta charset="utf-8" />
<meta http-equiv="refresh" content="0; url=https://mellifluous-marzipan-3893e2.netlify.app/contact/" />
</head>
</html>

除了前四行之外,这个HTML基本上与我期望呈现的内容没有任何关系。

我想问题是<meta http-equiv="refresh" ...,但它是从哪里来的?为什么它没有出现在dev中?在我通常的head中,我只有以下两个http-equiv,并且主站点(使用相同的head)现在正在运行(EDIT:错误已修复),所以您可以看到head的样子:

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta http-equiv="content-type" content="text/html; charset=utf-8" />

编辑:我刚刚注意到我想要的页面(在我的开发环境中我得到的webaddress/contact)存储在构建中的public/contact/contact.html中。

无论我单击/中的链接(效果良好),还是手动转到/contact/,都会出现相同的结果。

有人能帮我破解这个吗?我可以提供回购等服务,但也许答案很明显,我只是太傻了,看不见?也许这与/contact/页面的别名有关?

如果有帮助的话,当我将baseURL设置为另一个URL时,我只是从重定向到的baseURL/contact/中获得404,而不是这个无限循环。

编辑:我发现netlify网站上有正确的页面,此处(编辑器:已修复错误)。它被放置在/public/contact/index.html中。

编辑:事实证明,当我将url: contact放在layouts/contact.md的前面时,当站点建成时,public/contact.html就不存在了,只剩下public/contact/index.html

编辑:当我将以下内容放在标题中时,我得到public/contact.html(具有正确的内容/页面),并且在public/contact/index.html中也得到同一页面。

编辑:发现/contact/contact/contact/之间存在一些混淆。我最初链接到/contact/,修复程序似乎只是将我的链接更改为/contact。不确定为什么会导致无限重定向,但它现在正在工作。

重定向循环包含两个不同的重定向:

  • /contact/==>/contact。(响应状态代码301)

    $ curl -i 'https://mellifluous-marzipan-3893e2.netlify.app/contact/'
    HTTP/2 301 
    // other headers and response body truncated
    
  • CCD_ 38==>CCD_ 39。(客户端重定向使用http-equiv="refresh",别名使用类似的机制实现。请参阅别名的工作原理)。

    $ curl -i 'https://mellifluous-marzipan-3893e2.netlify.app/contact'
    HTTP/2 200
    // other headers truncated and response body formatted
    <!DOCTYPE html>
    <html>
    <head>
    <title>https://mellifluous-marzipan-3893e2.netlify.app/contact/</title>
    <link
    rel="canonical"
    href="https://mellifluous-marzipan-3893e2.netlify.app/contact/"
    />
    <meta name="robots" content="noindex" />
    <meta charset="utf-8" />
    <meta
    http-equiv="refresh"
    content="0; url=https://mellifluous-marzipan-3893e2.netlify.app/contact/"
    />
    </head>
    </html>
    

看来这是第一个受到指责的人。很可能是netlify重定向规则配置不正确。请检查以下文件中的规则,看看是否有任何错误:

  • _redirects
  • netlify.toml

(请参阅重定向和重写)。

相关内容

  • 没有找到相关文章

最新更新