My website: Redirector
Content evolves, pages move around, URLs get redirected. The simple facts of the web.
💡 automate
- Store as (DRY) data
- Publish to S3 with a Github action
S3 > Buckets > bucket
Edit static website hosting
Example:
{
"posts/2020-aug/twenty-twenty-one": "posts/2020-08/twenty-twenty-one"
}
Redirects
[
{
"Condition": {
"KeyPrefixEquals": "posts/2020-aug/twenty-twenty-one"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "posts/2020-08/twenty-twenty-one"
}
},
{
"Condition": {
"KeyPrefixEquals": "posts/2020-jul/massive-attack-eutopia-ep"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "posts/2020-07/massive-attack-eutopia"
}
},
{
"Condition": {
"KeyPrefixEquals": "posts/2020-may/getz/gilberto-vol-2-live-from-carnegie-hall"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "posts/2020-05/getz-gilberto-vol-2"
}
},
{
"Condition": {
"KeyPrefixEquals": "posts/2020-may/getz/gilberto"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "posts/2020-05/getz-gilberto-vol-1"
}
},
{
"Condition": {
"KeyPrefixEquals": "posts/2020-may/elliott-smith-figure-8"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "posts/2020-05/an-impossible-album"
}
},
{
"Condition": {
"KeyPrefixEquals": "posts/2019-jun/tossa-de-mar-rocks"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "posts/2019-06/tossa-de-mar-rocks"
}
},
{
"Condition": {
"KeyPrefixEquals": "posts/2019-jun/static-site-generators-a-brief-history"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "posts/2019-06/static-site-generators-brief-history"
}
},
{
"Condition": {
"KeyPrefixEquals": "posts/2019-may/staging-my-website-v2-rebuilt-in-react-static"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "posts/2019-05/staging-my-website-v2-rebuilt-in-react-static"
}
},
{
"Condition": {
"KeyPrefixEquals": "posts/2019-may/hello-world-again"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "posts/2019-06/hello-world-again"
}
},
{
"Condition": {
"KeyPrefixEquals": "posts/2017-apr/london-lean-kanban-days-2017"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "posts/2017-04/london-lean-kanban-days-2017"
}
},
{
"Condition": {
"KeyPrefixEquals": "posts/2017-jan/hello-world"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "posts/2017-01/hello-world"
}
},
{
"Condition": {
"KeyPrefixEquals": "feed"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "blog"
}
},
{
"Condition": {
"KeyPrefixEquals": "meta/docs/project-structure"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "meta/docs/conventions"
}
},
{
"Condition": {
"KeyPrefixEquals": "meta/records/current/a11y-no-shrink-to-fit"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "meta/records/rejected/a11y-no-shrink-to-fit"
}
},
{
"Condition": {
"KeyPrefixEquals": "meta/records/current/browser-support"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "meta/records/pending/browser-support"
}
},
{
"Condition": {
"KeyPrefixEquals": "meta/records/current/conventions-structure-atomic-semantics"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "meta/records/rejected/conventions-structure-atomic-semantics"
}
},
{
"Condition": {
"KeyPrefixEquals": "meta/records/current/content-markdown-unified-remark-rehype"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "meta/records/rejected/content-markdown-unified-remark-rehype"
}
},
{
"Condition": {
"KeyPrefixEquals": "meta/records/current/router-react-router"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "meta/records/rejected/react-router"
}
},
{
"Condition": {
"KeyPrefixEquals": "meta/records/current/stack-jam-stack"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "meta/records/current/ssr-with-jam-stack"
}
},
{
"Condition": {
"KeyPrefixEquals": "meta/records/current/stack-react-static-typescript"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "meta/records/rejected/react-static"
}
},
{
"Condition": {
"KeyPrefixEquals": "meta/records/current/styling-sass-post-css"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "meta/records/rejected/styling-sass-post-css"
}
},
{
"Condition": {
"KeyPrefixEquals": "meta/records/current/theming-css-variables"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "meta/records/current/styling-css"
}
},
{
"Condition": {
"KeyPrefixEquals": "meta/records/rejected/stack-gatsby-typescript"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "meta/records/rejected/gatsby"
}
},
{
"Condition": {
"KeyPrefixEquals": "meta/records/rejected/styling-typed-css-modules"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "meta/records/rejected/styling-typed-css-modules"
}
},
{
"Condition": {
"KeyPrefixEquals": "tags/static-websites"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "tags/ssg"
}
},
{
"Condition": {
"KeyPrefixEquals": "tags/2020"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "tags/personal"
}
},
{
"Condition": {
"KeyPrefixEquals": "tags/unified"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "tags/unified-js"
}
},
{
"Condition": {
"KeyPrefixEquals": "tags/library"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "tags/software-engineering"
}
},
{
"Condition": {
"KeyPrefixEquals": "tags/social-networks"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "tags/social-web"
}
},
{
"Condition": {
"KeyPrefixEquals": "tags/internet"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "tags/web-development"
}
},
{
"Condition": {
"KeyPrefixEquals": "tags/web-design"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "design"
}
},
{
"Condition": {
"KeyPrefixEquals": "tags/a11y"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "tags/accessibility"
}
},
{
"Condition": {
"KeyPrefixEquals": "tags/remark"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "tags/markdown"
}
},
{
"Condition": {
"KeyPrefixEquals": "tags/rehype"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "tags/markdown"
}
},
{
"Condition": {
"KeyPrefixEquals": "tags/massive-attack"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "tags/electronica"
}
},
{
"Condition": {
"KeyPrefixEquals": "tags/browserslist"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "tags/web-development"
}
},
{
"Condition": {
"KeyPrefixEquals": "tags/1966"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "tags/music"
}
},
{
"Condition": {
"KeyPrefixEquals": "tags/1964"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "tags/music"
}
},
{
"Condition": {
"KeyPrefixEquals": "tags/elliot-smith"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "tags/music"
}
},
{
"Condition": {
"KeyPrefixEquals": "tags/2000"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "tags/music"
}
},
{
"Condition": {
"KeyPrefixEquals": "tags/sights"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "tags/place"
}
},
{
"Condition": {
"KeyPrefixEquals": "tags/cloudfront"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "tags/web-development"
}
},
{
"Condition": {
"KeyPrefixEquals": "tags/server-side-rendering"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "tags/web-development"
}
},
{
"Condition": {
"KeyPrefixEquals": "tags/costa-brava"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "tags/place"
}
},
{
"Condition": {
"KeyPrefixEquals": "tags/backlog"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "meta/project/backlog"
}
},
{
"Condition": {
"KeyPrefixEquals": "tags/reach-router"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "meta/records/rejected/react-router"
}
},
{
"Condition": {
"KeyPrefixEquals": "tags/web-history"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "tags/web-development"
}
},
{
"Condition": {
"KeyPrefixEquals": "tags/featured"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "posts"
}
},
{
"Condition": {
"KeyPrefixEquals": "experiment/what-scrolls-down"
},
"Redirect": {
"HostName": "andretorgal.com",
"HttpRedirectCode": "301",
"Protocol": "https",
"ReplaceKeyPrefixWith": "lab/piece/what-scrolls-down"
}
}
]