Utiliser une fiche personnalisée
Vous pouvez écrire une coutume Plug
pour gérer votre scénario. Voici un exemple:
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
Maintenant, il suffit d'ajouter au sommet de votre pipeline web/router.ex
:
pipeline :browser do
plug MyApp.Plugs.RewriteURL
plug :accepts, ["html"]
# Other plugs...
end
Ceci est une preuve de base du concept, mais devrait fonctionner pour la majorité des les cas.
Vous devrez modifier ce code en fonction de vos besoins exacts, car il manque certaines fonctionnalités. Par exemple, il ne transmet pas l'adresse query
ou params
de la requête à l'URL redirigée. Il effectue également une redirection de base. Vous pouvez donc utiliser un 307 redirect si vous souhaitez conserver la méthode de demande d'origine sans la modifier. Pourquoi voudriez-vous faire cela au niveau de l'application?
Habituellement, de telles réécritures sont effectuées sur la configuration au niveau du serveur Web. – mudasobwa
vrai, dans ce cas cowboy est mon serveur de niveau supérieur, aucun autre proxy inverse, thanx – webdeb
Ensuite, vous voulez probablement utiliser [routage Cowboy] (https://ninenines.eu/docs/en/cowboy/2.0/guide/routing /) pour ça. Quand j'ai dit «pourquoi au niveau de l'application», je voulais dire que «Plug» est trop profond dans l'application pour ce genre de tâche. – mudasobwa