凤凰城/插件/牛仔中的 RewriteUrl?

web*_*deb 3 elixir cowboy phoenix-framework plug

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

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

She*_*yar 5

使用定制插头

您可以编写自定义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
Run Code Online (Sandbox Code Playgroud)

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

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

  # Other plugs...
end
Run Code Online (Sandbox Code Playgroud)

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

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