mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
Add redirect to page parameters and redirects example
This commit is contained in:
parent
4f17ad69a7
commit
e2a28114d1
6 changed files with 71 additions and 8 deletions
|
@ -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<br>
|
||||
**draft** If true the content will not be rendered unless `hugo` is called with -d<br>
|
||||
**type** The type of the content (will be derived from the directory automatically if unset).<br>
|
||||
**markup** (Experimental) Specify "rst" for reStructuredText (requires
|
||||
|
|
37
docs/content/doc/redirects.md
Normal file
37
docs/content/doc/redirects.md
Normal file
|
@ -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
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<link rel="canonical" href="{{ .Url }}"/>
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
||||
<meta http-equiv="refresh" content="0;url={{ .Url }}" />
|
||||
</head>
|
||||
</html>
|
||||
```
|
||||
|
||||
Now when you go to `/my-awesome-blog-post/` it will do a meta redirect to
|
||||
`/docs/redirects/`.
|
5
docs/content/redirects/my-awesome-blog-post.md
Normal file
5
docs/content/redirects/my-awesome-blog-post.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
redirect: true
|
||||
slug: /my-awesome-blog-post/
|
||||
url: /docs/redirects1/
|
||||
---
|
|
@ -19,6 +19,7 @@
|
|||
<li class="nav-header">Extras</li>
|
||||
<li> <a href="/doc/shortcodes">ShortCodes</a></li>
|
||||
<li> <a href="/doc/indexes">Indexes</a></li>
|
||||
<li> <a href="/doc/redirects">Redirects</a></li>
|
||||
<li class="divider"></li>
|
||||
<li class="nav-header">Meta</li>
|
||||
<li> <a href="/doc/release-notes">Release Notes</a></li>
|
||||
|
|
8
docs/layouts/redirects/single.html
Normal file
8
docs/layouts/redirects/single.html
Normal file
|
@ -0,0 +1,8 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<link rel="canonical" href="{{ .Url }}"/>
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
||||
<meta http-equiv="refresh" content="0;url={{ .Url }}" />
|
||||
</head>
|
||||
</html>
|
|
@ -42,6 +42,7 @@ type Page struct {
|
|||
RenderedContent *bytes.Buffer
|
||||
contentType string
|
||||
Draft bool
|
||||
Redirect bool
|
||||
Tmpl *template.Template
|
||||
Markup string
|
||||
PageMeta
|
||||
|
@ -85,15 +86,22 @@ func initializePage(filename string) (page Page) {
|
|||
page.Params = make(map[string]interface{})
|
||||
page.Keywords = make([]string, 10, 30)
|
||||
page.Markup = "md"
|
||||
page.setSection()
|
||||
|
||||
return page
|
||||
}
|
||||
|
||||
func (p *Page) setSection() {
|
||||
x := strings.Split(p.FileName, string(os.PathSeparator))
|
||||
section := x[len(x)-2]
|
||||
|
||||
if section := x[len(x)-2]; section != "content" {
|
||||
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
|
||||
}
|
||||
}
|
||||
|
@ -102,7 +110,7 @@ func (page *Page) Type() string {
|
|||
if page.contentType != "" {
|
||||
return page.contentType
|
||||
}
|
||||
|
||||
page.setSection()
|
||||
if x := page.GetSection(); x != "" {
|
||||
return x
|
||||
}
|
||||
|
@ -130,6 +138,7 @@ func (page *Page) Layout(l ...string) string {
|
|||
// 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)
|
||||
os.Exit(1)
|
||||
|
@ -299,6 +308,8 @@ func (page *Page) handleMetaData(f interface{}) error {
|
|||
page.layout = interfaceToString(v)
|
||||
case "markup":
|
||||
page.Markup = interfaceToString(v)
|
||||
case "redirect":
|
||||
page.Redirect = interfaceToBool(v)
|
||||
case "status":
|
||||
page.Status = interfaceToString(v)
|
||||
default:
|
||||
|
|
Loading…
Reference in a new issue