У меня есть очень маленький сайт Hugo, который я пытаюсь развернуть на Netlify. Я получаю неожиданный бесконечный цикл, когда я создаю сайт, хотя, похоже, он работает в dev, используя hugo serve --ignoreCache --disableFastRender --noHTTPCache -D
.
Сайт состоит из двух страниц:
/
/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/
застревает в бесконечном цикле. Никаких ошибок при построении не возникает, просто кажется, что он пытается снова и снова загрузить страницу, но безрезультатно.
Я попытался настроить baseURL
в моем config.yaml
на соответствующий домен для производства, но это не помогло.
HTML страницы, которая отображается (и перерисовывается, и перерисовывается) в /contact/
, выглядит следующим образом (это версия от 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? У меня есть только следующие два http-equiv
в моем обычном head
, и основной сайт (использует тот же 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
в файле build.
Тот же результат возникает, если я нажимаю ссылку из /
(что работает нормально) или вручную перехожу к /contact/
.
Кто-нибудь может помочь мне взломать это? Я могу предоставить доступ к репо и т. д., но, может быть, ответы очевидны, и я просто слишком нуб, чтобы это увидеть? Может быть, это связано с псевдонимами страницы /contact/
?
Если это поможет, когда для baseURL был установлен другой URL-адрес, я просто получал 404 от baseURL/contact/
, на который меня перенаправляли, а не из этого бесконечного цикла.
EDIT: я обнаружил, что правильная страница находится на сайте netlify, здесь (EDIT: ошибка исправлена). Он помещается в /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
. Не уверен, почему это привело к бесконечному перенаправлению, но теперь это работает.
@Gage: отредактировал вопрос. На самом деле на сайте есть правильная страница, маршрутизация, похоже, работает не так, как ожидалось.
Цикл перенаправления содержит два разных перенаправления:
/contact/
==> /contact
. (код ответа 301)
$ curl -i 'https://mellifluous-marzipan-3893e2.netlify.app/contact/'
HTTP/2 301
// other headers and response body truncated
/contact
==> /contact/
. (перенаправление клиента с помощью 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
(см. Редиректы и рерайты).
Спасибо @Зик! Единственное, я получаю такое поведение и на своих локальных сборках (например, когда я открываю filesystem://contact.html
), так что я не думаю, что netlify может быть виноват? Кроме того, у меня нет перенаправлений в netlify.toml и файла _redirects. Я думаю, что ваш поиск завитков будет полезен, спасибо!
Но вы сказали, что «когда я создаю сайт с помощью hugo serve --ignoreCache --disableFastRender --noHTTPCache -D
, он работает нормально». Я в замешательстве. Можете ли вы предоставить минимальный репродуктор?
оказывается, ответ был в том, чтобы изменить мои ссылки на /contact
вместо /contact/
. До сих пор не уверен, почему последнее приводило к бесконечному перенаправлению при запуске hugo
(то есть при запуске из папки pulbic
), а не при hugo serve --ignoreCache --disableFastRender --noHTTPCache -D
... но это исправлено. Спасибо за помощь! :)
хм, это странно, потому что /contact
должен привести ко второму перенаправлению, указанному выше, в соответствии с предыдущим тестом. Можете ли вы предоставить репродуктор?
На данный момент я не могу - я потерял ошибку (к счастью). Хотя это было странно. Я был очень удивлен, что ошибка возникла в общедоступной сборке, а не в среде разработки — это, пожалуй, самая странная часть.
Можете ли вы добавить свой код для рабочей страницы и/или попробовать избавиться от псевдонимов и посмотреть, работает ли это?