diff options
author | Miguel Ángel Moreno <mail@migalmoreno.com> | 2022-12-16 22:46:55 +0100 |
---|---|---|
committer | Miguel Ángel Moreno <mail@migalmoreno.com> | 2022-12-16 22:46:55 +0100 |
commit | 796605c9e6122802e10dd3eb7961fb3707bdef40 (patch) | |
tree | ac6c72d52ecfc6b390bcb83d07b3996ef980f570 | |
parent | 7df3baffce079b0c090530586bf0a9ce7601becf (diff) |
router.lisp: Fix PCRE redirect rules.
-rw-r--r-- | router.lisp | 41 |
1 files changed, 22 insertions, 19 deletions
diff --git a/router.lisp b/router.lisp index 207c9b3..9e449b5 100644 --- a/router.lisp +++ b/router.lisp @@ -346,25 +346,28 @@ If REVERSE, reverse the redirect logic." (list :port port) '()))))) (with-slots (original-url redirect-url redirect-rule trigger) route - (build-uri - (let ((redirect-url - (let ((redirect (etypecase redirect-url - (quri:uri redirect-url) - (string (quri:make-uri :host redirect-url)) - ((or function symbol) (quri:uri (funcall redirect-url)))))) - (if (stringp trigger) - (if (ppcre:scan trigger (render-url url)) - (ppcre:regex-replace trigger (render-url url) (render-url redirect-url)) - url) - (typecase redirect-rule - (string - (if (ppcre:scan redirect-url (render-url url)) - (ppcre:regex-replace redirect-rule (render-url url) (render-url redirect-url)) - url)) - (list - (quri:copy-uri url :host (quri:uri-host redirect) - :path (redirect-paths redirect-rule url :reverse reverse))) - (otherwise redirect)))))) + (let ((redirect-url + (let ((redirect (etypecase redirect-url + (quri:uri redirect-url) + (string (quri:make-uri :host redirect-url)) + ((or function symbol) (quri:uri (funcall redirect-url)))))) + (if (stringp trigger) + (if (ppcre:scan trigger (render-url url)) + (ppcre:regex-replace trigger (render-url url) (render-url redirect-url)) + url) + (if redirect-rule + (typecase redirect-rule + (string + (if (ppcre:scan redirect-rule (render-url url)) + (ppcre:regex-replace redirect-rule (render-url url) (render-url redirect-url)) + url) + (ppcre:regex-replace redirect-rule (render-url url) (render-url redirect-url))) + (list + (quri:copy-uri url :host (quri:uri-host redirect) + :path (redirect-paths redirect-rule url :reverse reverse))) + (otherwise redirect)) + redirect))))) + (build-uri (if (and reverse original-url) original-url redirect-url)))))) |