리디렉션'myapp.com'를'www.myapp.com 에'레일을 사용하지 않고 htaccess?
-
11-07-2019 - |
문제
를 사용하여 변 연구소'클릭 가능한 사이트를 배포 수단 없이 자동화된 방식으로 리디렉션'myapp.com'를'www.myapp.com'(과가 없습니다.htacess).
거기에-레일 이것을 하는 방법?나는 플러그인이 필요 좋 하위 도메인-fu?
특히,내가 하려는 다음과 같습니다.
- 'myapp.com'=>'www.myapp.com'
- 'myapp.com/session/new'=>'www.myapp.com/session/new'
기본적으로,나는 항상'www'하위 도메인 앞에 추가되는 모든 요청에 대한(기 때문에 SSL 인증서 특히 공통의 이름'www.myapp.com').
해결책
어쩌면 이런 것 하:
class ApplicationController < ActionController::Base
before_filter :check_uri
def check_uri
redirect_to request.protocol + "www." + request.host_with_port + request.request_uri if !/^www/.match(request.host)
end
end
다른 팁
카슨의 대답을 잘 작동합니다.
여기에는 코드는 다른 방법을 가(www->no www)
before_filter :check_uri
def check_uri
if /^www/.match(request.host)
redirect_to request.protocol + request.host_with_port[4..-1] + request.request_uri
end
end
를 변경했 카슨의 대답을 얻을 작동하려면 이에서 레일 3.대체 요청을 합니다.uri 를 요청합니다.fullpath:
class ApplicationController < ActionController::Base
protect_from_forgery
Rails.env.production? do
before_filter :check_url
end
def check_url
redirect_to request.protocol + "www." + request.host_with_port + request.fullpath if !/^www/.match(request.host)
end
end
한다.나는 하나의 작은 또한 내가 만 원에서 이 동작을 내 production 환경:
def check_uri
redirect_to request.protocol + "www." + request.host_with_port + request.request_uri if !/^www/.match(request.host) if Rails.env == 'production'
end
이것이 대답했지만,나는 생각이 다른 사람에 대해 알고 있어야 CodeRack:정규 호스트 솔루션입니다.이것은 정말 좋은 그것을 허용한 환경을 보시려 리디렉션합니다. http://coderack.org/users/tylerhunt/middlewares/6-canonical-host
여기에 몇 가지 다른 방법:
head :moved_permanently, :location => ‘http://www.newdomain.com’
또:
def rails_301
headers["Status"] = "301 Moved Permanently"
redirect_to "http://www.newdomain.com"
end
당신의 사람들을 위해 찾고 또한 힘을 사용하여 SSL 을만큼의 계정을 관리,이 일에 대한 기반에 만큼의 계정에 SSL 을 루트 도메인
에서 DNS 설정을 나는 설정은 URL/앞으로 기록 DNS(단순)
URL foo.com 3600 http://www.foo.com
CNAME 설정한 사용에 대한 설정을 할 수하 WWW
CNAME www.foo.com 3600 providedssslendpoint.herokussl.com
도가 설치에 대한 별칭이트
ALIAS foo.com 3600 providedsslendpoint.herokussl.com
그때 나는 결정을 단순히 교체 foo.com 으로는 환경변수 ENV['SITE_HOST']
(는 것과 같을 수 있습 SITE_HOST www.foo.com 나 test.foo.com 다)그래서 내가 할 수 있습을 통해 나만큼의 계정을 구성합니다.는 방법으로,나는 무엇을 제어 할 수 있습니다에서 일어나는 다양한 환경에 적합합니다.(설정을 위한 환경 변수를 로컬에서 볼 수 https://github.com/bkeepers/dotenv)
예를 들어,시험 응용 프로그램용 test.foo.com 으로 url 그것은 또한 자신의 SSL endpoint 그래서 잘 작동합니다.
before_filter :check_domain
def check_domain
if Rails.env.production? || Rails.env.testing? and request.host.downcase != ENV['SITE_HOST']
redirect_to request.protocol + ENV['SITE_HOST'] + request.fullpath, :status => 301
end
end
지금부터 최종 사용자는 항상 액세스 www 강제 SSL.오래된 링크를 겪을 것이 작은 걸 하지만 아무것도 눈에 띈다.