복붙노트

[RUBY-ON-RAILS] 루비 온 레일즈에 www가 URL에 www가 아닌 ​​요청을 리디렉션

RUBY-ON-RAILS

루비 온 레일즈에 www가 URL에 www가 아닌 ​​요청을 리디렉션

그것은 간단한 문제입니다,하지만 난 몇 가지 빠른 인터넷 검색을하고 답변을 찾을 수없는 것.

이 (301) 직접 (http://x.com/abc> http://www.x.com/abc)을하는 루비 온 레일스 방법은 무엇. before_filter?

해결법

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

    1.요청도 전혀 레일에 접촉하지 않도록 이상적으로 당신은 당신의 웹 서버 (아파치, nginx를 등) 접속과 운전에서이 작업을 수행 할 것입니다.

    요청도 전혀 레일에 접촉하지 않도록 이상적으로 당신은 당신의 웹 서버 (아파치, nginx를 등) 접속과 운전에서이 작업을 수행 할 것입니다.

    귀하와 ApplicationController에 다음 before_filter 추가 :

    class ApplicationController < ActionController::Base
      before_filter :add_www_subdomain
    
      private
      def add_www_subdomain
        unless /^www/.match(request.host)
          redirect_to("#{request.protocol}x.com#{request.request_uri}",
                      :status => 301)
        end
      end
    end
    

    아파치를 사용하여 리디렉션을하고 싶지 않은 경우, 당신은이를 사용할 수 있습니다 :

    RewriteEngine on
    RewriteCond %{HTTP_HOST} !^www\.x\.com [NC]
    RewriteRule ^(.*)$ http://www.x.com/$1 [R=301,L]
    
  2. ==============================

    2.레일 4를 들어, 사용 -

    레일 4를 들어, 사용 -

      before_filter :add_www_subdomain
    
      private
      def add_www_subdomain
        unless /^www/.match(request.host)
          redirect_to("#{request.protocol}www.#{request.host_with_port}",status: 301)
        end
      end
    
  3. ==============================

    3.당신이 레일을 사용하는 경우 요한의 대답은, 완벽하게 정상적으로 동안> = 2.3 나는 새로운 금속을 생성하는 것이 좋습니다 것입니다. 레일 금속은보다 효율적으로 그리고 그들은 더 나은 성능을 제공합니다.

    당신이 레일을 사용하는 경우 요한의 대답은, 완벽하게 정상적으로 동안> = 2.3 나는 새로운 금속을 생성하는 것이 좋습니다 것입니다. 레일 금속은보다 효율적으로 그리고 그들은 더 나은 성능을 제공합니다.

    $ ruby script/generate metal NotWwwToWww
    

    그런 다음 파일을 열고 다음 코드를 붙여 넣습니다.

    # Allow the metal piece to run in isolation
    require(File.dirname(__FILE__) + "/../../config/environment") unless defined?(Rails)
    
    class NotWwwToWww
      def self.call(env)
        if env["HTTP_HOST"] != 'www.example.org'
          [301, {"Content-Type" => "text/html", "Location" => "www.#{env["HTTP_HOST"]}"}, ["Redirecting..."]]
        else
          [404, {"Content-Type" => "text/html"}, ["Not Found"]]
        end
      end
    end
    

    물론, 당신은 더 금속을 사용자 정의 할 수 있습니다.

    아파치를 사용하려면, 여기에 몇 가지 구성입니다.

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

    4.레일 더 나은 3 방법이있다 - 당신의 routes.rb 파일이 넣어 :

    레일 더 나은 3 방법이있다 - 당신의 routes.rb 파일이 넣어 :

      constraints(:host => "example.com") do
        # Won't match root path without brackets around "*x". (using Rails 3.0.3)
        match "(*x)" => redirect { |params, request|
          URI.parse(request.url).tap { |x| x.host = "www.example.com" }.to_s
        }
      end
    

    최신 정보

    여기 도메인 불가지론을 만드는 방법입니다 :

      constraints(subdomain: '') do
        match "(*x)" => redirect do |params, request|
          URI.parse(request.url).tap { |x| x.host = "www.#{x.host}" }.to_s
        end
      end
    
  5. ==============================

    5.나는 반대 (루트 도메인 리디렉션에 WWW)을 달성하려고이 문서를 발견했다. 그래서 루트 도메인에 www가 모든 페이지를 리디렉션 코드의 조각을 썼다.

    나는 반대 (루트 도메인 리디렉션에 WWW)을 달성하려고이 문서를 발견했다. 그래서 루트 도메인에 www가 모든 페이지를 리디렉션 코드의 조각을 썼다.

  6. ==============================

    6.당신은 아래의 코드를 시도 할 수 있습니다 -

    당신은 아래의 코드를 시도 할 수 있습니다 -

    location / {
      if ($http_host ~* "^example.com"){
        rewrite ^(.*)$ http://www.example.com$1 redirect;
      }
    }
    
  7. ==============================

    7.또 다른 해결책은 추가적인 유연성을 많이 가지고 랙 정식 호스트 보석을 사용하는 수 있습니다. config.ru에 한 줄을 추가 :

    또 다른 해결책은 추가적인 유연성을 많이 가지고 랙 정식 호스트 보석을 사용하는 수 있습니다. config.ru에 한 줄을 추가 :

    use Rack::CanonicalHost, 'www.example.com', if: 'example.com'
    

    호스트가 example.com 일치하는 경우에만 www.example.com로 리디렉션됩니다. GitHub의 중요 정보의 다른 예 많아요.

  8. from https://stackoverflow.com/questions/1706247/redirect-non-www-requests-to-www-urls-in-ruby-on-rails by cc-by-sa and MIT license