diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2022-06-13 09:52:02 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2022-06-13 11:40:25 +0200 |
commit | a5a4422aaeffe0e9df713cf09c73a9cc423a2e1e (patch) | |
tree | 6d3b5d6b8a2d23aa59416a00a664b772f7d24581 /helpers/url.go | |
parent | 617e094482cbb8e46e5606bc7ff5ead109419d4d (diff) | |
download | hugo-a5a4422aaeffe0e9df713cf09c73a9cc423a2e1e.tar.gz hugo-a5a4422aaeffe0e9df713cf09c73a9cc423a2e1e.zip |
Fix relURL with leading slash when baseURL includes a subdirectory
Fixes #9994
Diffstat (limited to 'helpers/url.go')
-rw-r--r-- | helpers/url.go | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/helpers/url.go b/helpers/url.go index 193dd3c86..7cb998ca2 100644 --- a/helpers/url.go +++ b/helpers/url.go @@ -103,17 +103,11 @@ func (p *PathSpec) AbsURL(in string, addLanguage bool) string { } if url.IsAbs() || strings.HasPrefix(in, "//") { + // It is already absolute, return it as is. return in } - var baseURL string - if strings.HasPrefix(in, "/") { - u := p.BaseURL.URL() - u.Path = "" - baseURL = u.String() - } else { - baseURL = p.BaseURL.String() - } + baseURL := p.getBaseURLRoot(in) if addLanguage { prefix := p.GetLanguagePrefix() @@ -140,13 +134,22 @@ func (p *PathSpec) AbsURL(in string, addLanguage bool) string { } } } + return paths.MakePermalink(baseURL, in).String() } -// RelURL creates a URL relative to the BaseURL root. -// Note: The result URL will not include the context root if canonifyURLs is enabled. +func (p *PathSpec) getBaseURLRoot(path string) string { + if strings.HasPrefix(path, "/") { + // Treat it as relative to the server root. + return p.BaseURLNoPathString + } else { + // Treat it as relative to the baseURL. + return p.BaseURLString + } +} + func (p *PathSpec) RelURL(in string, addLanguage bool) string { - baseURL := p.BaseURL.String() + baseURL := p.getBaseURLRoot(in) canonifyURLs := p.CanonifyURLs if (!strings.HasPrefix(in, baseURL) && strings.HasPrefix(in, "http")) || strings.HasPrefix(in, "//") { return in |