2014-04-22 3 views
0

내 응용 프로그램 컨트롤러 (레일 3.2)의 before_filter에서 표준 도메인을 보장하려고합니다. GET 요청이 지원되는 도메인에는 있지만 표준 도메인에는 들어오지 않는 경우 정확하게 경로 및 프로토콜로 리디렉션해야하지만 스왑 아웃 된 도메인에 리디렉션해야합니다.동일한 경로로 새 도메인으로 리디렉션

before_filter :ensure_correct_domain 
def ensure_correct_domain 
    if Rails.env.production? && request.get? && request.host != Settings.domain 
    redirect_to host: Settings.domain 
    end 
end 

이 코드는 대부분 작동하지만 포맷 된 경로에서 오류가 발생했습니다. 여기에 일어나는 내용은 다음과 같습니다

는 슬프게도, 나는 확장을 잃고, 나는 이유를 모르겠어요. 나는 또한 내가 우연히 만난 적이없는 더 많은 경우를 걱정한다.

어떻게 깨끗하게 현재 요청 된 URL의 URI 의 호스트를 대체 할 수 있으며 모든 경우에 작동했다?

답변

2

해시를 redirect_to에 전달하면 url_for이 해시로 호출됩니다. 형식이 지정된 경로의 경우 해시에 format: "xml" (또는 무엇이든)을 추가해야합니다. 아마도 비교적 깨끗한 (상대적으로) 대안은 표준 도메인을 사용하여 URL을 구성하고 그 문자열을 사용하여 redirect_to을 발행하는 것입니다. 이 문자열은 프로토콜로 시작하는 경우 추가 처리없이 사용됩니다.

3.2 이후 버전에서는 정상적으로 작동해야한다고 생각하지만 테스트하지 않았습니다.

if Rails.env.production? && request.get? && request.host != Settings.domain 
    redirect_to "#{request.protocol}#{Settings.domain}#{request.fullpath}" 
end 
+0

감사합니다. 경로 재구성을 구문 분석하지 않아도됩니다. –

관련 문제