Hakyll.Web.Redirect

hakyll-4.9.5.1: A static website compiler library

Safe Haskell | None
Language | Haskell98

Hakyll.Web.Redirect

Description

Module used for generating HTML redirect pages. This allows renaming pages to avoid breaking existing links without requiring server-side support for formal 301 Redirect error codes

Synopsis

- data Redirect = Redirect {
  - redirectTo :: String
  }
- createRedirects :: [(Identifier, String)] -> Rules ()

# Documentation

data Redirect #

This datatype can be used directly if you want a lower-level interface to generate redirects. For example, if you want to redirect `foo.html` to `bar.jpg`, you can use:

    create ["foo.html"] $ do
        route idRoute
        compile $ makeItem $ Redirect "bar.jpg"

Constructors

Redirect |
Fields redirectTo :: String

Instances

Eq Redirect # |
Methods (==) :: Redirect -> Redirect -> Bool # (/=) :: Redirect -> Redirect -> Bool #
Ord Redirect # |
Methods compare :: Redirect -> Redirect -> Ordering # (<) :: Redirect -> Redirect -> Bool # (<=) :: Redirect -> Redirect -> Bool # (>) :: Redirect -> Redirect -> Bool # (>=) :: Redirect -> Redirect -> Bool # max :: Redirect -> Redirect -> Redirect # min :: Redirect -> Redirect -> Redirect #
Show Redirect # |
Methods showsPrec :: Int -> Redirect -> ShowS # show :: Redirect -> String # showList :: [Redirect] -> ShowS #
Binary Redirect # |
Methods put :: Redirect -> Put # get :: Get Redirect # putList :: [Redirect] -> Put #
Writable Redirect # |
Methods write :: FilePath -> Item Redirect -> IO () #

createRedirects :: [(Identifier, String)] -> Rules () #

This function exposes a higher-level interface compared to using the `Redirect` type manually.

This creates, using a database mapping broken URLs to working ones, HTML files which will do HTML META tag redirect pages (since, as a static site, we can't use web-server-level 301 redirects, and using JS is gross).

This is useful for sending people using old URLs to renamed versions, dealing with common typos etc, and will increase site traffic. Such broken URLs can be found by looking at server logs or by using Google Webmaster Tools. Broken URLs must be valid Haskell strings, non-URL-escaped valid POSIX filenames, and relative links, since they will be defined in a `hakyll.hs` and during generation, written to disk with the filename corresponding to the broken URLs. (Target URLs can be absolute or relative, but should be URL-escaped.) So broken incoming links like http://www.gwern.net/foo/ which should be http://www.gwern.net/foobar cannot be fixed (since you cannot create a HTML file named `"foo/"` on disk, as that would be a directory).

An example of a valid association list would be:

    brokenLinks =
        [ ("projects.html", "http://github.com/gwern")
        , ("/Black-market archive", "Black-market%20archives")
        ]

In which case the functionality can then be used in `main` with a line like:

    version "redirects" $ createRedirects brokenLinks

The `version` is recommended to separate these items from your other pages.

The on-disk files can then be uploaded with HTML mimetypes (either explicitly by generating and uploading them separately, by auto-detection of the filetype, or an upload tool defaulting to HTML mimetype, such as calling `s3cmd` with `--default-mime-type=text/html`) and will redirect browsers and search engines going to the old/broken URLs.

See also https://groups.google.com/d/msg/hakyll/sWc6zxfh-uM/fUpZPsFNDgAJ.