문제

를 사용하여 변 연구소'클릭 가능한 사이트를 배포 수단 없이 자동화된 방식으로 리디렉션'myapp.com'를'www.myapp.com'(과가 없습니다.htacess).

거기에-레일 이것을 하는 방법?나는 플러그인이 필요 좋 하위 도메인-fu?

특히,내가 하려는 다음과 같습니다.

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

기본적으로,나는 항상'www'하위 도메인 앞에 추가되는 모든 요청에 대한(기 때문에 SSL 인증서 특히 공통의 이름'www.myapp.com').

도움이 되었습니까?

해결책

어쩌면 이런 것 하:

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

다른 팁

카슨의 대답을 잘 작동합니다.

여기에는 코드는 다른 방법을 가(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

를 변경했 카슨의 대답을 얻을 작동하려면 이에서 레일 3.대체 요청을 합니다.uri 를 요청합니다.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

한다.나는 하나의 작은 또한 내가 만 원에서 이 동작을 내 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

이것이 대답했지만,나는 생각이 다른 사람에 대해 알고 있어야 CodeRack:정규 호스트 솔루션입니다.이것은 정말 좋은 그것을 허용한 환경을 보시려 리디렉션합니다. http://coderack.org/users/tylerhunt/middlewares/6-canonical-host

여기에 몇 가지 다른 방법:

 head :moved_permanently, :location => ‘http://www.newdomain.com’

또:

def rails_301
headers["Status"] = "301 Moved Permanently"
redirect_to "http://www.newdomain.com"
end 

당신의 사람들을 위해 찾고 또한 힘을 사용하여 SSL 을만큼의 계정을 관리,이 일에 대한 기반에 만큼의 계정에 SSL 을 루트 도메인

에서 DNS 설정을 나는 설정은 URL/앞으로 기록 DNS(단순)

URL foo.com     3600        http://www.foo.com

CNAME 설정한 사용에 대한 설정을 할 수하 WWW

CNAME   www.foo.com 3600        providedssslendpoint.herokussl.com

도가 설치에 대한 별칭이트

ALIAS   foo.com 3600        providedsslendpoint.herokussl.com

그때 나는 결정을 단순히 교체 foo.com 으로는 환경변수 ENV['SITE_HOST'] (는 것과 같을 수 있습 SITE_HOST www.foo.com 나 test.foo.com 다)그래서 내가 할 수 있습을 통해 나만큼의 계정을 구성합니다.는 방법으로,나는 무엇을 제어 할 수 있습니다에서 일어나는 다양한 환경에 적합합니다.(설정을 위한 환경 변수를 로컬에서 볼 수 https://github.com/bkeepers/dotenv)

예를 들어,시험 응용 프로그램용 test.foo.com 으로 url 그것은 또한 자신의 SSL endpoint 그래서 잘 작동합니다.

  before_filter :check_domain

  def check_domain
    if Rails.env.production? || Rails.env.testing? and request.host.downcase != ENV['SITE_HOST']
      redirect_to request.protocol + ENV['SITE_HOST'] + request.fullpath, :status => 301
    end
  end

지금부터 최종 사용자는 항상 액세스 www 강제 SSL.오래된 링크를 겪을 것이 작은 걸 하지만 아무것도 눈에 띈다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top