【问题标题】:Redirect Elixir Phoenix request from root domain to www将 Elixir Phoenix 请求从根域重定向到 www
【发布时间】:2016-02-29 04:26:54
【问题描述】:
【问题讨论】:
标签:
redirect
heroku
elixir
phoenix-framework
【解决方案1】:
只需在应用端点顶部的重定向中输入 plug。
在lib/app/endpoint.ex:
defmodule App.Endpoint do
use Phoenix.Endpoint, otp_app: :app
socket "/socket", App.UserSocket
plug App.Plugs.WWWRedirect
# ...
end
在lib/app/plugs/www_redirect.ex:
defmodule App.Plugs.WWWRedirect do
import Plug.Conn
def init(options) do
options
end
def call(conn, _options) do
if bare_domain?(conn.host) do
conn
|> Phoenix.Controller.redirect(external: www_url(conn))
|> halt
else
conn # Since all plugs need to return a connection
end
end
# Returns URL with www prepended for the given connection. Note this also
# applies to hosts that already contain "www"
defp www_url(conn) do
"#{conn.scheme}://www.#{conn.host}"
end
# Returns whether the domain is bare (no www)
defp bare_domain?(host) do
!Regex.match?(~r/\Awww\..*\z/i, host)
end
end
请注意,自 nothing in lib is reloaded 以来,您需要重新启动服务器才能生效。