2013-01-16 1 views
2

랙 재 응답에 쿼리 문자열 추가 :다음과 같이 내가 내 사이트에 등록 된 모든 비 .COM 도메인을 캡처하는 간단한 301 리디렉션을 가지고

DOMAIN = 'www.mywebsite.com' 

use Rack::Rewrite do 
    r301 %r{.*}, "http://#{DOMAIN}$&", :if => Proc.new {|rack_env| 
    rack_env['SERVER_NAME'] != DOMAIN && ENV["RACK_ENV"] == 'production' 
    } 
end 

내가 쿼리 문자열을 추가 할을 응답에 형식

?utm_source=#{rack_env['SERVER_NAME']} 

그러나 서버를 중단하는 방법을하지 운동 확실히 없습니다 :) 그것을 할 수 & 어떤 원래 쿼리 문자열을 유지 원래 도메인을 추가하는 방법?

그것은 사람이 주 도메인 아래에있는 하위 페이지를 칠 것 같지는하지만 나는 재에서 $ &을 삭제하고 내 문자열로 교체 할 때, 그것은 로그에 오류없이 불면 ...

답변

2

원래 코드가 작동하지 않는 이유는 두 번째 인수 내에서 rack_env을 사용할 수 없다는 것입니다. 이는 두 번째 인수가 세 번째 인수에 대한 블록 인수이기 때문입니다. 말이 돼?

당신 그러나 리디렉션의 두 번째 인수로 발동를 전달할 수 있습니다, 그래서 부분적으로 테스트 (이 같은 일을해야 생각 :

DOMAIN = 'www.mywebsite.com' 

ORIGINAL_REQUEST = Proc.new do |match, rack_env| 
    "#{DOMAIN}?utm_source=#{rack_env['REQUEST_URI']}" 
end 

use Rack::Rewrite do 
    r301 %r{.*}, ORIGINAL_REQUEST, :if => Proc.new {|rack_env| 
    rack_env['SERVER_NAME'] != DOMAIN && ENV["RACK_ENV"] == 'production' 
    } 
end 
+0

이 단지에 자리하고 있었다! 정말 고마워. 방금 첫 번째 블록의 REQUEST_URI를 SERVER_NAME (으)로 변경하면 완벽하게 작동합니다. – Les

+0

Great :) 현상금을 수여 할 수 있습니까? 고마워;) – jordelver

+0

잘하면 그것은 당신에게 그것을 수여 받았다. – Les

관련 문제