Overriding approot - yesodweb/yesod GitHub Wiki
This page demonstrates different ways you may wish to override the approot method.
Relative Approot
This will use no root at all. Keep in mind this will not work with emails and RSS feeds.
approot = ApprootRelative
Static Approot
Note absence of trailing slash
approot = ApprootStatic "http://localhost"
Approot from master settings
Get a static application root from runtime configuration stored in the foundation datatype:
approot = ApprootMaster $ appRoot . appSettings
Approot based on request
This will use the approot from appSettings but fall back to the http host header field
approot = ApprootRequest $ \app req ->
case appRoot $ appSettings app of
Nothing -> getApprootText guessApproot app req
Just root -> root
app here is the master site and req is the request.
This will get the approot from the request header host field:
approot = guessApproot
Same as above but instead of guessing if links should be https(based on the X-Forwarded-Proto header for example) will only make links https:// if the connection is actually secure.
import Network.Wai (requestHeaderHost, isSecure)
approot = ApprootRequest $ \_ r -> maybe ""
(mappend (if isSecure r then "https://" else "http://") . decodeUtf8)
(requestHeaderHost r)