我已经构建了一个非常小的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
(请参阅重定向和重写)。