27 votes

Rediriger «myapp.com» vers «www.myapp.com» dans les rails sans utiliser htaccess?

À l'aide de Morph Labs Appspace déployer un site signifie pas de méthode automatique pour rediriger 'myapp.com' à 'www.myapp.com (et pas de l'accès à l' .htacess).

Est-il un des rails de chemin à faire cela? Ai-je besoin d'un plugin comme sous-domaine-fu?

Plus précisément, je suis en train de faire quelque chose comme:

  • 'myapp.com' => 'www.myapp.com'
  • 'myapp.com/session/new' => 'www.myapp.com/session/new'

Fondamentalement, je veux toujours le 'www' sous-domaine ajouté à chaque requête (parce que le SSL cert a spécifiquement un nom commun de "www.myapp.com').

30voto

carson Points 3852

Peut-être que quelque chose comme ça ferait l'affaire:

 class ApplicationController < ActionController::Base
  before_filter :check_uri

  def check_uri
    redirect_to request.protocol + "www." + request.host_with_port + request.request_uri if !/^www/.match(request.host)
  end
end
 

9voto

Mike H Points 459

La réponse de Carson fonctionne très bien.

Voici le code pour aller dans l'autre sens (www -> no www)

 before_filter :check_uri

def check_uri
  if /^www/.match(request.host)
    redirect_to request.protocol + request.host_with_port[4..-1] + request.request_uri 
  end
end
 

5voto

Lee McAlilly Points 3533

J'ai dû changer la réponse de Carson pour que cela fonctionne dans Rails 3. J'ai remplacé request.uri par request.fullpath:

 class ApplicationController < ActionController::Base
  protect_from_forgery

  Rails.env.production? do
    before_filter :check_url
  end

  def check_url
    redirect_to request.protocol + "www." + request.host_with_port + request.fullpath if !/^www/.match(request.host)
  end
end
 

2voto

levi rosol Points 1901

Cela a très bien fonctionné pour moi. J'ai fait un petit ajout car je ne voulais que ce comportement dans mon environnement de production:

 def check_uri
  redirect_to request.protocol + "www." + request.host_with_port + request.request_uri if !/^www/.match(request.host) if Rails.env == 'production'
end
 

1voto

erskingardner Points 1366

Je sais que c'est répondu, mais je pensais que tout le monde devrait connaître la solution CodeRack: Canonical Host. C'est vraiment bien car cela permet des redirections spécifiques à env. http://coderack.org/users/tylerhunt/middlewares/6-canonical-host

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X