gpt4 book ai didi

http - 如何使用 Noir Web 框架进行 HTTP 302 重定向

转载 作者:可可西里 更新时间:2023-11-01 15:18:02 26 4
gpt4 key购买 nike

我正在使用 Clojure 的 Noir 框架帮助建立一个网站,尽管我在 Django/Python 方面有更多的经验。在 Django 中,我习惯了

这样的 URL
http://site/some/url 

被 302 自动重定向到

http://site/some/url/

Noir比较挑剔,不做这个。

自动执行此操作的正确方法是什么?由于良好的 URL 是访问站点的重要方式,而且许多用户会忘记结尾的斜线,这是我想添加到我的站点的基本功能。

编辑:根据@IvanKoblik 的建议,这是最终对我有用的方法:

(defn wrap-slash [handler]
(fn [{:keys [uri] :as req}]
(if (and (.endsWith uri "/") (not= uri "/"))
(handler (assoc req :uri (.substring uri
0 (dec (count uri)))))
(handler req))))

最佳答案

我认为这可以通过自定义中间件实现。 noir/server 具有公共(public)功能 add-middleware .

这是一个 page来自 webnoir 解释如何做到这一点。

根据 source code 判断这个自定义中间件首先执行,因此您可以自行处理 session 、cookie、url 参数等。


我写了一个非常愚蠢的中间件包装器版本,它检查请求 URI 是否以斜杠结尾,如果不是,则重定向到末尾带有斜杠的 URI:

(use [ring.util.response :only [redirect]])

(defn wrap-slash [handler]
(fn [{:keys [uri] :as req}]
(if (.endsWith uri "/")
(handler req)
(redirect
(str uri "/")))))

我在我的 ring/moustache 网络应用程序上对其进行了测试,它运行良好。


EDIT1(在您回复我的评论后扩展我的答案。)

您可以使用自定义中间件来添加或去除结尾斜杠的 URL。只需做这样的事情来去除尾随的斜杠:

(use [ring.util.response :only [redirect]])

(defn add-slash [handler]
(fn [{:keys [uri] :as req}]
(if (.endsWith uri "/")
(handler (assoc req
:uri (.substring uri
0 (dec (count uri)))))
(handler req))))

关于http - 如何使用 Noir Web 框架进行 HTTP 302 重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12469914/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com