Comment puis-je utiliser les Rails de voies de rediriger un domaine vers un autre?
Mon application utilisée pour exécuter sur le foo.tld, mais maintenant, il fonctionne sur la barre.tld. Demandes sera encore pour les foo.tld, je veux rediriger vers le bar.tld.
Comment puis-je faire cela dans les rails des routes?
- Avez-vous envisagé de transfert DNS?
- vous pouvez le faire dans application_controller: si demande.accueil == 'certains.le site' redirect_to url_for(d'accueil: "site", sous-domaine: 'autre'), état: :moved_permanently fin
Vous devez vous connecter pour publier un commentaire.
Cela fonctionne dans les Rails 3.2.3
Cela fonctionne dans les Rails 4.0
match "/(*path)"...
via: [:get, :post]
à lamatch
optionsGET
etHEAD
les demandes de redirection (301 réponse) alors que toutes les autres méthodes (PUT
,PATCH
,DELETE
, etPOST
) devrait, techniquement, être bloqué (400 ou réponse 404). J'ai tendance à être d'accord avec ce point de vue, car ces méthodes ne doivent être appelés dans le bon (redirigé) site toutGET
demandes arrivent le plus souvent à partir de vieux liens etc./foo\.tld/
. Pourrait également vouloir correspondre à la fin de la chaîne, c'est à dire/foo\.tld$/
afin de ne pas rediriger les demandes vers foo.tld.bar.tld/chemin d'accès.Ce fait le travail de l'autre réponse. Si en plus, il préserve les chaînes de requête ainsi. (Rails 4):
Remarque: Si vous avez affaire à plein de domaines au lieu de simplement les sous-domaines, de l'utilisation :de domaine au lieu de :l'hôte.
"http://bar.tld/#{req.fullpath}"
facile."http://bar.tld#{req.fullpath}"
parce quereq.fullpath
contient déjà le slash.La solution suivante redirections multiples domaines sur
GET
etHEAD
demandes, tandis que le retour http 400 sur toutes les autres demandes (comme par ce commentaire à une question similaire)./lib/contraintes/domain_redirect_constraint.rb:
/config/routes.rb:
Pour quelque raison
constraints Constraints::DomainRedirectConstraint.new do
n'a pas fonctionné pour moi sur heroku, maisconstraints: Constraints::DomainRedirectConstraint.new
a bien fonctionné.Bits approche plus moderne: