redireccionar htaccess enmascarar ejemplo dominio descargar con carpeta ruby-on-rails redirect subdomain

ruby-on-rails - enmascarar - redireccionar con htaccess



¿Redirige ''myapp.com'' a ''www.myapp.com'' en rieles sin usar htaccess? (7)

El uso del espacio de aplicaciones de Morph Labs para implementar un sitio no implica una forma automática de redireccionar ''myapp.com'' a ''www.myapp.com'' (y no tiene acceso a .htacess).

¿Hay alguna manera de hacer esto? ¿Necesitaría un complemento como subdomain-fu ?

Más específicamente, estoy tratando de hacer algo como:

  • ''myapp.com'' => ''www.myapp.com''
  • ''myapp.com/session/new'' => ''www.myapp.com/session/new''

Básicamente, siempre quiero que el subdominio ''www'' esté precedido en cada solicitud (porque el certificado SSL específicamente tiene un nombre común de ''www.myapp.com'').


Aquí hay un par de maneras diferentes:

head :moved_permanently, :location => ‘http://www.newdomain.com’

otro:

def rails_301 headers["Status"] = "301 Moved Permanently" redirect_to "http://www.newdomain.com" end


Esto funciono muy bien para mi. Hice una pequeña adición ya que solo quería este comportamiento en mi entorno de producción:

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


La respuesta de Carson funciona de maravilla.

Aquí está el código para ir por el otro lado (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


Para aquellos de ustedes que buscan forzar SSL usando heroku, esto funcionó bien para mí, basado en SSL de Heroku en el dominio raíz

En mi configuración de DNS configuro un registro URL / Reenviar (DNS simple)

URL foo.com 3600 http://www.foo.com

La configuración CNAME solo necesita configuración para WWW

CNAME www.foo.com 3600 providedssslendpoint.herokussl.com

También tuve que configurar y Alias ​​para mi raíz

ALIAS foo.com 3600 providedsslendpoint.herokussl.com

Entonces decidí simplemente reemplazar foo.com con una variable de env ENV[''SITE_HOST''] (donde SITE_HOST podría ser igual a www.foo.com o test.foo.com) para que pueda tener control a través de mi configuración de heroku. De esa forma, puedo controlar lo que ocurre en diferentes entornos. (para configurar variables de env localmente, consulte https://github.com/bkeepers/dotenv )

Por ejemplo, mi aplicación de prueba usa test.foo.com como URL, pero también tiene su propio punto final SSL, por lo que funciona bien para mí.

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

A partir de ahora, los usuarios finales siempre accederán a www con SSL forzado. Los enlaces antiguos sufrirán un pequeño bloqueo pero nada notable.



Tal vez algo como esto haría el truco:

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


Tuve que cambiar la respuesta de Carson para que funcionara en Rails 3. Reemplacé request.uri con request.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