diff --git a/docs/content/doc/aliases.md b/docs/content/doc/aliases.md new file mode 100644 index 000000000..1e8a3556e --- /dev/null +++ b/docs/content/doc/aliases.md @@ -0,0 +1,33 @@ +--- +title: "Aliases" +Pubdate: "2013-07-09" +Aliases: + - /doc/redirects/ + - /doc/alias/ +--- + +For people migrating existing published content to Hugo theres a good chance +you need a mechanism to handle redirecting old urls. + +Luckily, this can be handled easily with aliases in Hugo. + +## Example +**content/posts/my-awesome-blog-post.md** + + --- + aliases: + - /posts/my-original-url/ + - /2010/even-earlier-url.html + --- + +Now when you go to any of the aliases locations they +will redirect to the page. + +## Important Behaviors + +1. *Hugo makes no assumptions about aliases. They also don't change based +on your UglyUrls setting. You Need to provide a relative path and the +complete filename or directory.* + +2. *Aliases are rendered prior to any content and will be overwritten by +any content with the same location.* diff --git a/docs/content/doc/redirects.md b/docs/content/doc/redirects.md deleted file mode 100644 index 74b742d4b..000000000 --- a/docs/content/doc/redirects.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: "Redirects" -Pubdate: "2013-07-09" ---- - -For people migrating existing published content to Hugo theres a good chance -you need a mechanism to handle redirecting old urls. - -Luckily, this can be handled easily in a couple of easy steps. - -1. Create a special post for the redirect and mark the file as a `redirect` - file in the front matter. Here is an example - `content/redirects/my-awesome-blog-post.md` : - - ```markdown - --- - redirect: true - slug: /my-awesome-blog-post/ - url: /docs/redirects/ - --- -``` - -2. Set the redirect template `layouts/redirects/single.html`: - - ```html - - - - - - - - - ``` - -Now when you go to `/my-awesome-blog-post/` it will do a meta redirect to -`/docs/redirects/`. \ No newline at end of file diff --git a/docs/content/redirects/my-awesome-blog-post.md b/docs/content/redirects/my-awesome-blog-post.md deleted file mode 100644 index dedf283d1..000000000 --- a/docs/content/redirects/my-awesome-blog-post.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -redirect: true -slug: /my-awesome-blog-post/ -url: /docs/redirects1/ ---- \ No newline at end of file diff --git a/docs/layouts/chrome/menu.html b/docs/layouts/chrome/menu.html index 99e9a04a4..5efd81830 100644 --- a/docs/layouts/chrome/menu.html +++ b/docs/layouts/chrome/menu.html @@ -19,7 +19,7 @@
  • ShortCodes
  • Indexes
  • -
  • Redirects
  • +
  • Aliases
  • Release Notes
  • diff --git a/docs/layouts/redirects/single.html b/docs/layouts/redirects/single.html deleted file mode 100644 index e99e75811..000000000 --- a/docs/layouts/redirects/single.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/hugolib/page.go b/hugolib/page.go index a0134c50d..1562d6cff 100644 --- a/hugolib/page.go +++ b/hugolib/page.go @@ -99,21 +99,9 @@ func (p *Page) setSection() { return } - //section := x[len(x)-2] if section := x[len(x)-2]; section != "content" { p.Section = section } - - //c := p.Site.Config - //systemDirs := map[string]bool{ - //c.ContentDir: true, - //c.StaticDir: true, - //c.LayoutDir: true, - //} - - //if !systemDirs[section] && !p.Redirect { - //p.Section = section - //} } func (page *Page) Type() string { diff --git a/hugolib/site.go b/hugolib/site.go index 076e2a06a..3d10caadc 100644 --- a/hugolib/site.go +++ b/hugolib/site.go @@ -101,6 +101,7 @@ func (site *Site) Process() (err error) { } func (site *Site) Render() (err error) { + site.RenderAliases() site.ProcessShortcodes() site.timerStep("render shortcodes") site.AbsUrlify() @@ -144,6 +145,12 @@ func (s *Site) prepTemplates() { templates.Funcs(funcMap) + s.Tmpl = templates + s.primeTemplates() + s.loadTemplates() +} + +func (s *Site) loadTemplates() { walker := func(path string, fi os.FileInfo, err error) error { if err != nil { PrintErr("Walker: ", err) @@ -157,15 +164,20 @@ func (s *Site) prepTemplates() { } text := string(filetext) name := path[len(s.Config.GetAbsPath(s.Config.LayoutDir))+1:] - t := templates.New(name) + t := s.Tmpl.New(name) template.Must(t.Parse(text)) } return nil } filepath.Walk(s.Config.GetAbsPath(s.Config.LayoutDir), walker) +} - s.Tmpl = templates +func (s *Site) primeTemplates() { + alias := "\n \n \n \n \n \n \n " + + t := s.Tmpl.New("alias") + template.Must(t.Parse(alias)) } func (s *Site) initialize() { @@ -307,6 +319,22 @@ func (s *Site) BuildSiteMeta() (err error) { return } +func (s *Site) RenderAliases() error { + for i, p := range s.Pages { + for _, a := range p.Aliases { + content, err := s.RenderThing(s.Pages[i], "alias") + if strings.HasSuffix(a, "/") { + a = a + "index.html" + } + if err != nil { + return err + } + s.WritePublic(a, content.Bytes()) + } + } + return nil +} + func (s *Site) RenderPages() error { for i, _ := range s.Pages { content, err := s.RenderThing(s.Pages[i], s.Pages[i].Layout())