2011-08-17 5 views
4

그래서 한 레일에서 다른 도메인으로 레일 (3.0.9) 앱을 옮길 것입니다. 나도 같은 일을 생각 나는 ssl_requirement을 사용하고 특정 컨트롤러보기에,레일 : 특정 도메인으로 리디렉션하지만 SSL을 재정의하지 않습니까?

before_filter :ensure_domain if Rails.env.production? 

APP_DOMAIN = 'www.newdomain.com' 

def ensure_domain 
    if request.env['HTTP_HOST'] != APP_DOMAIN 
    redirect_to "http://#{APP_DOMAIN}", :status => 301 
    end 
end 

그러나 : Heroku가, 모두가 새 도메인에 끝나는 있는지 확인과 같이하는 응용 프로그램 컨트롤러에 before_filter를 사용하여 제안 하지만 강제 SSL 프로토콜.

나는 요청 처리와 모든 재즈에 똑똑하지 않습니다. 내 질문은,이 두 무한 루프를 만드는거야, SLL 어디로 https로 리디렉션하려고하고 전에 필터를 다시 HTTP로 넣으려고합니까?

어떻게이 문제를 해결할 예정입니까?

답변

5

그냥 현재의 프로토콜 존중 : 확장의 일부 비트와 포괄적 인 답변

redirect_to("#{request.protocol}#{APP_DOMAIN}", :status => 301) 
+0

브릴리언트. 감사 :) – Andrew

2

, 그것은 다음과 같은 형태 전체에를;

class ApplicationController < ActionController::Base 

    before_filter :redirect_to_example if Rails.env.production? 

    # Prevent CSRF attacks by raising an exception. 
    # For APIs, you may want to use :null_session instead. 
    protect_from_forgery with: :exception 

    private 

    # Redirect to the appropriate domain i.e. example.com 
    def redirect_to_example 
     domain_to_redirect_to = 'example.com' 
     domain_exceptions = ['example.com', 'www.example.com'] 
     should_redirect = !(domain_exceptions.include? request.host) 
     new_url = "#{request.protocol}#{domain_to_redirect_to}#{request.fullpath}" 
     redirect_to new_url, status: :moved_permanently if should_redirect 
    end 
end 

domain_exceptions에 무엇을 제외한 domain_to_redirect_to에 이르기까지 모든 리디렉션합니다.

관련 문제