표준 URL을 갖고 싶은 Passenger(mod_rails)를 통해 제공되는 Rails 앱이 있습니다.
모든 요청을 다음으로 전달하고 싶습니다.http://mydomain.com(그래서 다시 쓰세요http://www.mydomain.com에게http://mydomain.com).
Rails가 아닌 다른 앱에서는 mod_rewrite와 다음과 같은 .htaccess 파일을 사용하여 이 작업을 수행합니다.
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^(.+)mydomain\.com$ [NC]
RewriteRule ^(.*)$ http://mydomain.com/$1 [R=301,L]
그러나 이는 Passenger에서는 작동하지 않는 것 같습니다. .htaccess 파일을 공용 디렉토리에 배치하고 지시어를 이동하는 방법(vhost 구성에서) 등 모든 종류의 조합을 시도했지만 이것이 작동하도록 할 수는 없습니다.
이 작업을 어떻게 수행할 수 있습니까?
답변1
마지막 줄을 다음으로 바꿔보세요.
RewriteRule ^(.*)http://mydomain.com%{REQUEST_URI} [R=영구,QSA,L]
그래도 실패하면 mydomain.com에 다시 쓰기만 수행하는 URL www.mydomain.com에 대해 별도의 가상 호스트를 사용하는 것이 좋습니다. 승객은 mod_rewrite를 잘 사용하지 않습니다.
도움이 되었기를 바랍니다.
답변2
업데이트: 분명히 저는 이전 버전의 Passenger를 실행하고 있었습니다(어떻게 놓쳤는지 모르겠습니다). 저는 현재 Passenger 2.2.9를 실행 중이고 원본 재작성을 가상 호스트에 넣는 것이 예상한 대로(원하는 대로) 작동합니다!
이전 버전의 Passenger에 대한 해결 방법에 대한 Google 그룹 토론:http://groups.google.com/group/phusion-passenger/browse_thread/thread/5e019e5d65beb54f
이전 버전의 경우:
www
별도의 가상 호스트로 호스팅 하고 리디렉션합니다(Jonathan Clarke의 제안).
RedirectMatch 301 ^(.*)$ http://mydomain.com$1
인앱을 다시 작성하십시오.
# before_filter :trim_www
def trim_www
if request.subdomains.first == "www"
if request.subdomains == ["www"]
redirect_to "#{request.protocol}#{request.
domain}#{request.port_string}#{request.path}"
else
subdomains = request.subdomains.shift.join(".")
subdomains << "." unless subdomains.blank?
redirect_to
"#{request.protocol}#{subdomains}#{request.domain}#{request.port_string}#{r equest.path}"
end
end
end
(RSL에 대한 제안은원본 게시물이 코드의 경우)