Хьюго: добавление http-equiv="refresh" content="0 при сборке. Остановить это?

У меня есть очень маленький сайт 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. Не уверен, почему это привело к бесконечному перенаправлению, но теперь это работает.

🤔 А знаете ли вы, что...
JavaScript позволяет создавать асинхронные запросы к серверу с помощью технологии AJAX.


1
79
1

Ответ:

Решено

Цикл перенаправления содержит два разных перенаправления:

  • /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

(см. Редиректы и рерайты).