복붙노트

[RUBY-ON-RAILS] 어떻게 한 도메인에서 다른 도메인으로 리디렉션하는 레일 경로를 사용할 수 있습니까?

RUBY-ON-RAILS

어떻게 한 도메인에서 다른 도메인으로 리디렉션하는 레일 경로를 사용할 수 있습니까?

내 애플 foo.tld에서 실행하는 데 사용하지만, 지금은 bar.tld에서 실행됩니다. 요청은 여전히 ​​foo.tld에 올 것이다, 나는 bar.tld로 리디렉션하고 싶습니다.

어떻게 레일 노선에서이 작업을 수행 할 수 있습니다?

해결법

  1. ==============================

    1.레일 3.2.3에서이 작품

    레일 3.2.3에서이 작품

    constraints(:host => /foo.tld/) do
      match "/(*path)" => redirect {|params, req| "http://bar.tld/#{params[:path]}"}
    end
    

    레일 4.0에서이 작품

    constraints(:host => /foo.tld/) do
      match "/(*path)" => redirect {|params, req| "http://bar.tld/#{params[:path]}"},  via: [:get, :post]
    end
    
  2. ==============================

    2.이것은 다른 대답의 작업을 수행합니다. 뿐만 아니라하지만, 그것은뿐만 아니라 쿼리 문자열을 유지합니다. (4 레일)

    이것은 다른 대답의 작업을 수행합니다. 뿐만 아니라하지만, 그것은뿐만 아니라 쿼리 문자열을 유지합니다. (4 레일)

    # http://foo.tld?x=y redirects to http://bar.tld?x=y
    constraints(:host => /foo.tld/) do
      match '/(*path)' => redirect { |params, req|
        query_params = req.params.except(:path)
        "http://bar.tld/#{params[:path]}#{query_params.keys.any? ? "?" + query_params.to_query : ""}"
      }, via: [:get, :post]
    end
    

    참고 : 호스트 : 대신 도메인 : 당신이 전체 도메인 대신 단지 하위 도메인 사용을 처리하는 경우.

  3. ==============================

    3.(비슷한 질문이 의견에 따라) 다른 모든 요청에 ​​HTTP 400을 반환하는 동안 다음과 같은 솔루션은 GET 및 HEAD 요청에 여러 도메인을 리디렉션합니다.

    (비슷한 질문이 의견에 따라) 다른 모든 요청에 ​​HTTP 400을 반환하는 동안 다음과 같은 솔루션은 GET 및 HEAD 요청에 여러 도메인을 리디렉션합니다.

    /lib/constraints/domain_redirect_constraint.rb:

    module Constraints
      class DomainRedirectConstraint
        def matches?(request)
          request_host = request.host.downcase
          return request_host == "foo.tld1" || \
                 request_host == "foo.tld2" || \
                 request_host == "foo.tld3"
        end
      end
    end
    

    /config/routes.rb:

    require 'constraints/domain_redirect_constraint'
    
    Rails.application.routes.draw do
      match "/(*path)", to: redirect {|p, req| "//bar.tld#{req.fullpath}"}, via: [:get, :head], constraints: Constraints::DomainRedirectConstraint.new
      match "/(*path)", to: proc { [400, {}, ['']] }, via: :all, constraints: Constraints::DomainRedirectConstraint.new
    
      ...
    end
    

    어떤 이유로 제약 제약 :: DomainRedirectConstraint.new 할 일이 Heroku가 나를 위해 일을하지 않았다하지만 제약 : 제약 :: DomainRedirectConstraint.new는 벌금을했다.

  4. ==============================

    4.더 현대적인 접근 방식을 비트 :

    더 현대적인 접근 방식을 비트 :

    constraints(host: 'www.mydomain.com') do
        get '/:param' => redirect('https://www.mynewurl.com/:param')
    end
    
  5. ==============================

    5.

    constraints(host: /subdomain\.domain\.com/) do
      match '/(*path)' => redirect { |params, req|
        "https://www.example.com#{req.fullpath}"
      }, via: [:get, :head]
    end
    

    Heroku가에 사용자 지정 도메인을 사용할 때이 사용하고 난 myapp.herokuapp.com에서 리디렉션 할 -> www.example.com.

  6. from https://stackoverflow.com/questions/10918529/how-can-i-use-rails-routes-to-redirect-from-one-domain-to-another by cc-by-sa and MIT license