Redirect Elixir Phoenix request from root domain to www

We have a Phoenix application on Heroku with DNS on Route 53. We followed this blog post to set up the correct http for https redirect:
http://building.vts.com/blog/2015/11/02/route53-ssl-naked-domain-redirect/

Everything works, and all that remains is redirecting the root to the www subdomain.

Is there a recommended way to set this up in Phoenix style?

+5
source share
2 answers

Just a plug in redirection at the top of the application endpoint.

In lib/app/endpoint.ex :

 defmodule App.Endpoint do use Phoenix.Endpoint, otp_app: :app socket "/socket", App.UserSocket plug App.Plugs.WWWRedirect # ... end 

In 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 

Please note that for this you need to restart the server in order to have an effect, since nothing in the lib reboots .

+7
source

You can also use plug_canonical_host to take care of it, and make sure your Elixir application is only accessible through its canonical URL.

0
source

Source: https://habr.com/ru/post/1244081/


All Articles