Eu tenho um aplicativo Rails servido via Passenger (mod_rails) que desejo ter uma URL canônica.
Quero que todos os pedidos sejam direcionadoshttp://meudominio.com(então, reescrevahttp://www.meudominio.comparahttp://meudominio.com).
Em meus outros aplicativos não Rails, faço isso usando mod_rewrite e um arquivo .htaccess com o seguinte:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^(.+)mydomain\.com$ [NC]
RewriteRule ^(.*)$ http://mydomain.com/$1 [R=301,L]
No entanto, isso não parece funcionar com o Passenger. Eu tentei todos os tipos de combinações de colocar o arquivo .htaccess (no diretório público) e mover as diretivas (na configuração do vhost), mas não consigo fazer isso funcionar.
Como posso fazer isso?
Responder1
Tente substituir a última linha pelo seguinte:
ReescreverRegra ^(.*)http://meudominio.com%{REQUEST_URI} [R=permanente,QSA,L]
Se isso ainda falhar, recomendo usar um host virtual separado para o URL www.meudominio.com que apenas reescreve para meudominio.com. O passageiro não funciona bem com mod_rewrite.
Espero que isto ajude.
Responder2
ATUALIZAÇÃO: Aparentemente eu estava executando uma versão mais antiga do Passenger (não sei como perdi isso). Atualmente estou executando o Passenger 2.2.9 e colocar a reescrita original no vhost funciona conforme esperado (e desejado)!
Discussão em grupo do Google sobre soluções alternativas para versões mais antigas do Passenger:http://groups.google.com/group/phusion-passenger/browse_thread/thread/5e019e5d65beb54f
Para versões mais antigas:
Hospede www
como um vhost separado e redirecione (sugestão de Jonathan Clarke)
RedirectMatch 301 ^(.*)$ http://mydomain.com$1
Faça a reescrita no aplicativo:
# 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
(Adereços para RSL nopostagem originalpara este código)