Search code examples
common-lisphunchentoot

Redirect to https with hunchentoot


I've set up a hunchentoot server with ssl. I'd like regular http requests to be redirected to https.

It seems like some combination of hunchentoot:define-easy-handler and hunchentoot:redirect is the way to go, but I can't figure it out.

Here's what I have so far:

(defvar *https-handler*
  (make-instance 'hunchentoot:easy-ssl-acceptor
                 :name 'ssl
                 :ssl-privatekey-file #P"/path/to/privkey.pem"
                 :ssl-certificate-file #P"/path/to/cert.pem"
                 :port 443))

(hunchentoot:start *https-handler*)

Solution

  • Yes, you can add simple http handler with redirect to ssl version:

    (defvar *http-handler*
      (make-instance 'hunchentoot:easy-acceptor
                     :name 'http
                     :port 80))
    
    (hunchentoot:define-easy-handler (redir-to-ssl :uri (lambda (uri) t) :acceptor-names '(http)) ()
      (hunchentoot:redirect "/" :protocol :https)) ; where magic happens
    

    ...and then start it too:

    (hunchentoot:start *http-handler*)
    

    This version redirects simply to index /.