在Phoenix / Plug / Cowboy中重写eurl



如何在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。它还进行了基本的重定向,因此如果您希望保留原始请求方法而不将其更改为GET,则可以考虑使用307重定向。

相关内容

  • 没有找到相关文章

最新更新