Возможно, что-то вроде этого добилось бы цели:
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
Вот несколько различных путей:
head :moved_permanently, :location => ‘http://www.newdomain.com’
другой:
def rails_301
headers["Status"] = "301 Moved Permanently"
redirect_to "http://www.newdomain.com"
end
Ответ Карсона отлично работает.
Вот код, чтобы пойти другим путем (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
У меня это отлично сработало. Я сделал одно небольшое дополнение, так как хотел, чтобы такое поведение происходило только в моей производственной среде:
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
Я знаю, что на это есть ответ, но я думал, что все остальные должны знать о решении CodeRack: Canonical Host. Это действительно хорошо, поскольку позволяет выполнять перенаправления, специфичные для env. http://coderack.org/users/tylerhunt/middlewares/6-canonical-host