1 | (import spiffy intarweb uri-common) |
---|
2 | |
---|
3 | ; Generates a handler that can be used in vhost-map that will cause all requests to that URL to be rewritten to the domain specified in 'to'. |
---|
4 | (define (canonicalise-domain to) |
---|
5 | (let ((to (uri-reference to))) |
---|
6 | (assert (equal? '(/ "") (uri-path to))) |
---|
7 | (assert (null? (uri-query to))) |
---|
8 | ; We don't see fragments on the server and choose not to care about usernames and password fields. |
---|
9 | (lambda (continue) |
---|
10 | (let* ((old-u (request-uri (current-request))) |
---|
11 | (new-u (update-uri old-u |
---|
12 | scheme: (or (uri-scheme to) (uri-scheme old-u)) |
---|
13 | port: (or (uri-port to) (uri-port old-u)) |
---|
14 | host: (or (uri-host to) (uri-host old-u))))) |
---|
15 | (with-headers `((location ,new-u)) |
---|
16 | (lambda () (send-status 'moved-permanently))))))) |
---|
17 | |
---|
18 | (vhost-map `(("localhost" |
---|
19 | . ,(canonicalise-domain "https://posttestserver.dev")))) |
---|
20 | (server-port 8080) |
---|
21 | (start-server) |
---|