mirror of
https://github.com/gohugoio/hugo.git
synced 2026-08-24 07:18:54 +00:00
hugolib: Don't render default site redirect for non-primary isHTML output formats
When a custom output format has isHTML=true but no Path, renderDefaultSiteRedirect would derive intermediate redirect paths from homeLink (e.g. /en/foo.html), creating a spurious redirect at /en/ that overwrites the actual HTML content. Only render the default site redirect for the canonical "html" format or for formats with their own Path prefix (e.g. AMP). Fixes #14482 Co-Authored-By: Joe Mooring <joe.mooring@veriphor.com> Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -683,3 +683,69 @@ Home.
|
||||
"/guest/v1.0.0/en/p3 =>/guest/v1.0.0/en/foo/p1/|",
|
||||
)
|
||||
}
|
||||
|
||||
// Issue 14482
|
||||
func TestOutputFormatIsHTMLWithMultilangAliases(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
files := `
|
||||
-- hugo.toml --
|
||||
defaultContentLanguageInSubdir = true
|
||||
disableKinds = ['page', 'section', 'rss', 'sitemap', 'taxonomy', 'term']
|
||||
|
||||
[languages.en]
|
||||
[languages.de]
|
||||
|
||||
[outputFormats.foo]
|
||||
baseName = 'foo'
|
||||
isHTML = false
|
||||
mediaType = 'text/html'
|
||||
|
||||
[outputs]
|
||||
home = ['html', 'foo']
|
||||
-- content/index.de.md --
|
||||
---
|
||||
title: home de
|
||||
---
|
||||
-- content/index.en.md --
|
||||
---
|
||||
title: home en
|
||||
---
|
||||
-- layouts/home.html --
|
||||
Output format: html|Title: {{ .Title }}
|
||||
-- layouts/home.foo.html --
|
||||
Output format: foo|Title: {{ .Title }}
|
||||
`
|
||||
|
||||
b := Test(t, files)
|
||||
|
||||
b.AssertFileContent("public/en/index.html", `Output format: html|Title: home en`)
|
||||
b.AssertFileContent("public/en/foo.html", `Output format: foo|Title: home en`)
|
||||
b.AssertFileContent("public/de/index.html", `Output format: html|Title: home de`)
|
||||
b.AssertFileContent("public/de/foo.html", `Output format: foo|Title: home de`)
|
||||
b.AssertFileContent("public/index.html", `
|
||||
<head>
|
||||
<title>/en/</title>
|
||||
<link rel="canonical" href="/en/">
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="refresh" content="0; url=/en/">
|
||||
</head>
|
||||
`)
|
||||
|
||||
files = strings.ReplaceAll(files, "isHTML = false", "isHTML = true")
|
||||
|
||||
b = Test(t, files)
|
||||
|
||||
b.AssertFileContent("public/en/index.html", `Output format: html|Title: home en`)
|
||||
b.AssertFileContent("public/en/foo.html", `Output format: foo|Title: home en`)
|
||||
b.AssertFileContent("public/de/index.html", `Output format: html|Title: home de`)
|
||||
b.AssertFileContent("public/de/foo.html", `Output format: foo|Title: home de`)
|
||||
b.AssertFileContent("public/index.html", `
|
||||
<head>
|
||||
<title>/en/</title>
|
||||
<link rel="canonical" href="/en/">
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="refresh" content="0; url=/en/">
|
||||
</head>
|
||||
`)
|
||||
}
|
||||
|
||||
@@ -217,7 +217,7 @@ func pageRenderer(
|
||||
}
|
||||
}
|
||||
|
||||
if p.IsHome() && p.outputFormat().IsHTML && s.isDefault() {
|
||||
if of := p.outputFormat(); p.IsHome() && of.IsHTML && s.isDefault() && (of.Path != "" || of.Name == "html") {
|
||||
if err = s.renderDefaultSiteRedirect(p); err != nil {
|
||||
if sendErr(err) {
|
||||
continue
|
||||
|
||||
Reference in New Issue
Block a user