繁体   English   中英

在凤凰城/插头/牛仔重写Url?

[英]RewriteUrl in Phoenix / Plug / Cowboy?

如何在凤凰中重写一个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重定向

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM