Tengo una aplicación Rails servida a través de Passenger (mod_rails) y quiero tener una URL canónica.
Quiero que todas las solicitudes vayan ahttp://midominio.com(entonces, reescribehttp://www.midominio.comahttp://midominio.com).
En mis otras aplicaciones que no son Rails, lo logro usando mod_rewrite y un archivo .htaccess con lo siguiente:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^(.+)mydomain\.com$ [NC]
RewriteRule ^(.*)$ http://mydomain.com/$1 [R=301,L]
Sin embargo, esto no parece funcionar con Passenger. Probé todo tipo de combinaciones para colocar el archivo .htaccess (en el directorio público) y mover las directivas (en la configuración de vhost), pero no puedo hacer que esto funcione.
¿Cómo puedo lograr esto?
Respuesta1
Intente reemplazar esa última línea por la siguiente:
Reescribir regla ^(.*)http://midominio.com%{REQUEST_URI} [R=permanente,QSA,L]
Si eso aún falla, recomiendo usar un host virtual separado para la URL www.midominio.com que simplemente reescribe midominio.com. Passenger no funciona bien con mod_rewrite.
Espero que esto ayude.
Respuesta2
ACTUALIZACIÓN: Aparentemente estaba ejecutando una versión anterior de Passenger (no sé cómo me perdí eso). ¡Actualmente estoy ejecutando Passenger 2.2.9 y poner la reescritura original en el vhost funciona como se esperaba (y deseaba)!
Discusión grupal de Google sobre soluciones para versiones anteriores de Passenger:http://groups.google.com/group/phusion-passenger/browse_thread/thread/5e019e5d65beb54f
Para versiones anteriores:
Aloje el servidor virtual www
como un host independiente y redireccione (sugerencia de Jonathan Clarke)
RedirectMatch 301 ^(.*)$ http://mydomain.com$1
Haz la reescritura en la aplicación:
# 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
(Apoyos a RSL en elpublicación originalpara este código)