使用 hunchentoot 重定向到 https
Redirect to https with hunchentoot
我已经用 ssl 设置了一个 hunchentoot 服务器。我希望将常规的 http 请求重定向到 https。
似乎 hunchentoot:define-easy-handler
和 hunchentoot:redirect
的某种组合是可行的方法,但我想不出来。
这是我目前的情况:
(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*)
是的,您可以添加简单的 http 处理程序并重定向到 ssl 版本:
(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
...然后也启动它:
(hunchentoot:start *http-handler*)
此版本直接重定向到索引 /
。
嗯,我直接用hunchentoot:*dispatch-table*
。独立于我发现的路径重定向它的方法是 hunchentoot:redirect
除非处理程序内部 (hunchentoot:ssl-p)
。我的大多数 defun
ed 处理程序都包含在一个用于身份验证的宏中。所以,我只需要修改那个宏,然后 M-x slime-who-macroexpands
-> C-c C-k
.
(unless (hunchentoot:ssl-p)
(hunchentoot:redirect (hunchentoot:request-uri*)
:protocol :https))
如果您需要不加选择地将每个 HTTP 请求重定向到 HTTPS,则无需使用 easy-acceptor
。我建议定义一个专门的 acceptor
:
(defclass http-to-https-acceptor (hunchentoot:acceptor) ())
(defmethod hunchentoot:acceptor-dispatch-request ((acceptor http-to-https-acceptor) request)
(hunchentoot:redirect (hunchentoot:request-uri request)
:protocol :https))
然后在某个时候:
(hunchentoot:start (make-instance 'http-to-https-acceptor :port 80))
我已经用 ssl 设置了一个 hunchentoot 服务器。我希望将常规的 http 请求重定向到 https。
似乎 hunchentoot:define-easy-handler
和 hunchentoot:redirect
的某种组合是可行的方法,但我想不出来。
这是我目前的情况:
(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*)
是的,您可以添加简单的 http 处理程序并重定向到 ssl 版本:
(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
...然后也启动它:
(hunchentoot:start *http-handler*)
此版本直接重定向到索引 /
。
嗯,我直接用hunchentoot:*dispatch-table*
。独立于我发现的路径重定向它的方法是 hunchentoot:redirect
除非处理程序内部 (hunchentoot:ssl-p)
。我的大多数 defun
ed 处理程序都包含在一个用于身份验证的宏中。所以,我只需要修改那个宏,然后 M-x slime-who-macroexpands
-> C-c C-k
.
(unless (hunchentoot:ssl-p)
(hunchentoot:redirect (hunchentoot:request-uri*)
:protocol :https))
如果您需要不加选择地将每个 HTTP 请求重定向到 HTTPS,则无需使用 easy-acceptor
。我建议定义一个专门的 acceptor
:
(defclass http-to-https-acceptor (hunchentoot:acceptor) ())
(defmethod hunchentoot:acceptor-dispatch-request ((acceptor http-to-https-acceptor) request)
(hunchentoot:redirect (hunchentoot:request-uri request)
:protocol :https))
然后在某个时候:
(hunchentoot:start (make-instance 'http-to-https-acceptor :port 80))