2016-11-04 1 views
3

Comment réécrire un Url dans phoenix?
Par exemple récrire toutes les demandes de //www.app.com/xyz-//app.com/xyzRewriteUrl dans Phoenix/Plug/Cowboy?

est-il une option facile pour elle, comme force_ssl? Quelqu'un at-il une idée, où le brancher? A brancher une option pour cela?

+0

Habituellement, de telles réécritures sont effectuées sur la configuration au niveau du serveur Web. – mudasobwa

+0

vrai, dans ce cas cowboy est mon serveur de niveau supérieur, aucun autre proxy inverse, thanx – webdeb

+1

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

Répondre

3

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?

+0

semble bon, laisse voir s'il y aura d'autres, des approches plus générales – webdeb