diff --git a/docs/content/doc/front-matter.md b/docs/content/doc/front-matter.md index 0fb03b443..566fb1fba 100644 --- a/docs/content/doc/front-matter.md +++ b/docs/content/doc/front-matter.md @@ -4,8 +4,8 @@ date = "2013-07-01" +++ The front matter is one of the features that gives Hugo it's strength. It enables -you to include the meta data of the content right with it. Hugo supports a few -different formats each with their own identifying tokens. +you to include the meta data of the content right with it. Hugo supports a few +different formats each with their own identifying tokens. Supported formats:
**YAML**, identified by '\-\-\-'.
@@ -24,7 +24,7 @@ Supported formats:
- "VIM" slug: "spf13-vim-3-0-release-and-new-website" --- - Content of the file goes Here + Content of the file goes Here ### TOML Example @@ -39,7 +39,7 @@ Supported formats:
] slug = "spf13-vim-3-0-release-and-new-website" +++ - Content of the file goes Here + Content of the file goes Here ### JSON Example @@ -54,7 +54,7 @@ Supported formats:
], "slug": "spf13-vim-3-0-release-and-new-website", } - Content of the file goes Here + Content of the file goes Here ### Variables @@ -71,6 +71,7 @@ any variable they want to. These will be placed into the `.Params` variable avai #### Optional +**redirect** Mark the post as a redirect post
**draft** If true the content will not be rendered unless `hugo` is called with -d
**type** The type of the content (will be derived from the directory automatically if unset).
**markup** (Experimental) Specify "rst" for reStructuredText (requires diff --git a/docs/content/doc/redirects.md b/docs/content/doc/redirects.md new file mode 100644 index 000000000..74b742d4b --- /dev/null +++ b/docs/content/doc/redirects.md @@ -0,0 +1,37 @@ +--- +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 new file mode 100644 index 000000000..dedf283d1 --- /dev/null +++ b/docs/content/redirects/my-awesome-blog-post.md @@ -0,0 +1,5 @@ +--- +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 e0eaf7b23..99e9a04a4 100644 --- a/docs/layouts/chrome/menu.html +++ b/docs/layouts/chrome/menu.html @@ -19,6 +19,7 @@
  • ShortCodes
  • Indexes
  • +
  • Redirects
  • Release Notes
  • diff --git a/docs/layouts/redirects/single.html b/docs/layouts/redirects/single.html new file mode 100644 index 000000000..e99e75811 --- /dev/null +++ b/docs/layouts/redirects/single.html @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/hugolib/page.go b/hugolib/page.go index 450f32a1f..a0134c50d 100644 --- a/hugolib/page.go +++ b/hugolib/page.go @@ -46,6 +46,7 @@ type Page struct { RenderedContent *bytes.Buffer contentType string Draft bool + Aliases []string Tmpl *template.Template Markup string PageMeta @@ -98,16 +99,28 @@ 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 { if page.contentType != "" { return page.contentType } - + page.setSection() if x := page.GetSection(); x != "" { return x } @@ -151,6 +164,7 @@ func ReadFrom(buf io.Reader, name string) (page *Page, err error) { // TODO initalize separately... load from reader (file, or []byte) func NewPage(filename string) *Page { p := initializePage(filename) + if err := p.buildPageFromFile(); err != nil { fmt.Println(err) } @@ -264,6 +278,13 @@ func (page *Page) update(f interface{}) error { page.layout = interfaceToString(v) case "markup": page.Markup = interfaceToString(v) + case "aliases": + page.Aliases = interfaceArrayToStringArray(v) + for _, alias := range page.Aliases { + if strings.HasPrefix(alias, "http://") || strings.HasPrefix(alias, "https://") { + return fmt.Errorf("Only relative aliases are supported, %v provided", alias) + } + } case "status": page.Status = interfaceToString(v) default: