gpt4 book ai didi

elixir - 在 Phoenix/Plug/Cowboy 中重写 URL?

转载 作者:行者123 更新时间:2023-12-02 07:09:01 25 4
gpt4 key购买 nike

如何在phoenix中重写Url?
例如,将所有对 //www.app.com/xyz 的请求重写为 //app.com/xyz

是否有一个简单的选择,例如force_ssl?有谁知道在哪里插入它?有插头选项吗?

最佳答案

使用自定义插头

您可以编写自定义Plug来处理您的场景。这是一个例子:

defmodule MyApp.Plugs.RewriteURL do
import Plug.Conn
import Phoenix.Controller

@redirect_from "www.app.com"
@redirect_to "app.com"

def init(default), do: default

def call(%Plug.Conn{host: host, port: port, request_path: path} = conn, _) do
if host == @redirect_from do
conn
|> redirect(external: "http://#{@redirect_to}:#{port}#{path}")
|> halt
else
conn
end
end
end

现在只需将其添加到 web/router.ex 中管道的顶部即可:

pipeline :browser do
plug MyApp.Plugs.RewriteURL
plug :accepts, ["html"]

# Other plugs...
end
<小时/>

这是一个基本的概念证明,但应该适用于大多数情况。

您必须根据您的具体要求修改此代码,因为它缺少一些功能。例如,它不会将请求的 queryparams 传递到重定向的 URL。它还执行基本的重定向,因此您可以考虑使用 307 redirect如果您想保留原来的请求方法而不将其更改为GET。

关于elixir - 在 Phoenix/Plug/Cowboy 中重写 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40414112/

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