Problema simple pero parece que no puede encontrar una respuesta haciendo una búsqueda rápida en Google. ¿Cuál es la forma de Rails de hacer esto directamente con 301 (http://x.com/abc>http://www.x.com/abc). A before_filter?Redirige las solicitudes que no son www a www urls en Rails
Respuesta
Lo ideal sería hacerlo en la configuración de su servidor web (Apache, nginx etc.) para que la solicitud ni siquiera toque Rails en absoluto.
Añadir la siguiente before_filter
a su ApplicationController
:
class ApplicationController < ActionController::Base
before_filter :add_www_subdomain
private
def add_www_subdomain
unless /^www/.match(request.host)
redirect_to("#{request.protocol}x.com#{request.request_uri}",
:status => 301)
end
end
end
Si quería hacer la redirección usando Apache, se puede usar esto:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.x\.com [NC]
RewriteRule ^(.*)$ http://www.x.com/$1 [R=301,L]
Gran respuesta John. Si está utilizando Rails> = 2.3, le sugiero usar un Metal en su lugar. :) –
Gracias! Sí, buen punto sobre el Metal. –
¡De nada! –
Si bien la respuesta de Juan está perfectamente bien, si estás usando Rails> = 2.3. Sugeriría crear un nuevo Metal. Rails Metals son más eficientes y ofrecen un mejor rendimiento.
$ ruby script/generate metal NotWwwToWww
A continuación, abra el archivo y pegue el siguiente código.
# Allow the metal piece to run in isolation
require(File.dirname(__FILE__) + "/../../config/environment") unless defined?(Rails)
class NotWwwToWww
def self.call(env)
if env["HTTP_HOST"] != 'www.example.org'
[301, {"Content-Type" => "text/html", "Location" => "www.#{env["HTTP_HOST"]}"}, ["Redirecting..."]]
else
[404, {"Content-Type" => "text/html"}, ["Not Found"]]
end
end
end
Por supuesto, puedes personalizar más el Metal.
Si desea utilizar Apache, here's a few configurations.
Simone, algún consejo sobre cómo usar esto con Rails 3? Me gustaría redireccionar 'www.foo.com' a' foo.com'. –
Con Rails 3 es aún más fácil: utilice el método de "redirección" de enrutamiento. No es necesario usar un Metal. –
Encontré este artículo cuando intentaba lograr lo contrario (www a la redirección de dominio raíz). Así que escribí la pieza de código que redirects all pages from www to the root domain.
hay una mejor carriles de 3 vías - poner esto en su routes.rb
archivo:
constraints(:host => "example.com") do
# Won't match root path without brackets around "*x". (using Rails 3.0.3)
match "(*x)" => redirect { |params, request|
URI.parse(request.url).tap { |x| x.host = "www.example.com" }.to_s
}
end
actualización
Aquí es cómo hacer que el dominio agnóstico:
constraints(subdomain: '') do
match "(*x)" => redirect do |params, request|
URI.parse(request.url).tap { |x| x.host = "www.#{x.host}" }.to_s
end
end
El enlace está roto. – iamnotmaynard
Para carriles 4, úsela -
before_filter :add_www_subdomain
private
def add_www_subdomain
unless /^www/.match(request.host)
redirect_to("#{request.protocol}www.#{request.host_with_port}",status: 301)
end
end
Puede probar el código de abajo -
location/{
if ($http_host ~* "^example.com"){
rewrite ^(.*)$ http://www.example.com$1 redirect;
}
}
- 1. ¿Cómo redirigir las URL que no son www a www usando htaccess?
- 2. Redirigir URL que no sea www a www usando .htaccess
- 3. sitios Www y no www
- 4. de redirección a https y no http www a www
- 5. .htaccess redirigir tanto http: // con y sin www y https: // www a https: // www no
- 6. .htaccess Redireccionar no WWW WWW preservar URI cadena
- 7. .htaccess redirigir www a no www con SSL/HTTPS
- 8. Tumblr redirección de dominio personalizado - WWW para no WWW
- 9. ¿Cómo redirigir con "www" URL sin URL "www" o viceversa?
- 10. ¿Qué nombre canónico es mejor? www o no-www?
- 11. ¿Redirige las solicitudes solo si no se encuentra el archivo?
- 12. Redireccionar sin www a www con Node.js y expresar
- 13. cómo redirigir dinámicamente direcciones URL basadas en WWW para URLs sin www con múltiples dominios en la misma VirtualHost
- 14. mod_rewrite - añadir www
- 15. Introduciendo mi aplicación Heroku Rails en www y sin www solo funciona durante una hora?
- 16. sesión diferente con url's con-www y sin-www
- 17. Wordpress .htaccess www. no forzando
- 18. 301 Redirigir desde el dominio principal (www y no www) al subdominio
- 19. Sintaxis para 301 redirigir de www a no www usando httpd.conf
- 20. Problema de cookies PHP - www o sin www
- 21. Python WWW macro
- 22. Permisos para/var/www/html
- 23. no www redirección .htaccess - ignorar otros subdominios
- 24. ¿Cómo puedo evitar que WWW :: Mechanize siga los redireccionamientos?
- 25. Redirigir a 'www' antes del requisito de SSL
- 26. Nginx reescritura de dominio prefijado la no-www al dominio www-prefijo
- 27. WWW o no WWW, ¿qué elegir como nombre principal del sitio?
- 28. ¿Por qué apunta Apache a/var/www?
- 29. Expresión regular para que no coincida con "www"
- 30. cómo redirigir https: // a https: // www
¿por qué quiere www allí? ¿Qué te da? Checkout http://no-www.org/index.php –
@James - Un uso común de www. es para que no necesite un segundo dominio "sin cookies" para publicar contenido estático. – MiffTheFox