Comment faire pour rediriger sans le www à l'aide de Rails 3 / Rack?

Je comprends qu'il ya beaucoup de questions que répondre à cette question. Je suis familier avec .htaccess et nginx.conf méthodes, mais je n'ai pas accès à la configuration traditionnelle des méthodes sur heroku.

Simone Carletti a donné cette réponse, qui tire parti de Rails 2.x les Métaux, mais je suis à l'aide de Rails 3 et ce n'est pas compatible.
Rediriger les non-requêtes www www les url dans les Rails

Veuillez noter:

Je ne suis pas à la recherche d'un simple before_filter dans mon ApplicationController. J'aimerais faire une réécriture similaire à Simone. Je crois que c'est du travail pour le serveur web ou middleware comme Rack à tout le moins, donc je voudrais quitter ce peu en dehors de l'application du code.

Objectif

redirect                to                  status
----------------------------------------------------
www.foo.com             foo.com             301
www.foo.com/whatever    foo.com/whatever    301

Seulement hôtes correspondant /^www\./ devrait être rediriger. Toutes les autres demandes doivent être ignorés.

  • Je ne comprends pas la nécessité pour chaque méthode. Mon middlewares ne l'avez pas, et ils fonctionnent comme un charme.
  • Ah, je vois maintenant: l'auto est retourné en tant que le corps de la réponse dans le cas de redirection, et le corps doit respond_to? :chaque. Ce n'est probablement pas la manière canonique. Je suggère simplement de retourner une chaîne vide ou [] que le corps de la réponse à la place.
  • Je sais je suis en retard à la fête, mais pour les utilisateurs de google et d'utiliser cela plus tard: Méfiez-vous que cela va probablement faire vos tests échouent dans des moyens détournés comme le DEFAULT_HOST pour des tests rspec est "www.example.com" et toutes les demandes seront obtenir redirigé, même à l'intérieur de vos tests!
InformationsquelleAutor maček | 2010-10-28