Problème simple mais n'arrive pas à trouver une réponse en faisant un peu de googling rapide. Quel est le moyen de Rails de ce faire 301 directe (http://x.com/abc>http://www.x.com/abc). Un before_filter?Redirige les requêtes non-www vers www urls dans Rails
Répondre
Idéalement, vous le feriez dans votre configuration de serveur Web (Apache, nginx, etc.) afin que la requête ne touche même pas Rails.
Ajouter la before_filter
suivante à votre 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 vous ne voulez faire la redirection en utilisant Apache, vous pouvez utiliser ceci:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.x\.com [NC]
RewriteRule ^(.*)$ http://www.x.com/$1 [R=301,L]
Grande réponse John. Si vous utilisez Rails> = 2.3, je suggère d'utiliser un Metal à la place. :) –
Merci! Oui, bon point sur le Metal. –
De rien! –
Alors que la réponse de John est parfaitement bien, si vous utilisez Rails> = 2.3 Je suggère de créer un nouveau métal. Rails Metals sont plus efficaces et offrent de meilleures performances.
$ ruby script/generate metal NotWwwToWww
Puis ouvrez le fichier et collez le code suivant.
# 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
Bien sûr, vous pouvez personnaliser davantage le métal.
Si vous souhaitez utiliser Apache, here's a few configurations.
Simone, un conseil sur comment utiliser ceci avec Rails 3? J'aimerais rediriger 'www.foo.com' vers' foo.com'. –
Avec Rails 3, c'est encore plus simple: utilisez la méthode de routage 'redirect'. Pas besoin d'utiliser un métal. –
J'ai trouvé cet article en essayant d'obtenir le contraire (redirection de domaine www vers root). J'ai donc écrit le morceau de code redirects all pages from www to the root domain.
Il y a une meilleure Rails 3 voies - mettre ceci dans votre fichier routes.rb
:
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
Mise à jour
Voici comment le rendre domaine agnostique:
constraints(subdomain: '') do
match "(*x)" => redirect do |params, request|
URI.parse(request.url).tap { |x| x.host = "www.#{x.host}" }.to_s
end
end
Le lien est rompu. – iamnotmaynard
Pour rails 4, utilisez-le -
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
Vous pouvez le code ci-dessous -
location/{
if ($http_host ~* "^example.com"){
rewrite ^(.*)$ http://www.example.com$1 redirect;
}
}
- 1. Force www. dans les rails
- 2. ColdFusion redirige les liens vers Joomla
- 3. Utiliser htaccess pour rediriger les requêtes de non-www vers www (mais avec une torsion)
- 4. .htaccess redirection permanente vers www
- 5. Urls pour les résultats des requêtes Ajax
- 6. urls encodés utf8 dans les rails 2.3.4
- 7. URLs dans Rails 3
- 8. combinant force-www avec des URLs propres
- 9. Comment remplacer www. d'url sans casser les URLs comme www.someurlwww.com
- 10. Rails URLs
- 11. Rediriger l'URL non-www vers www .htaccess
- 12. avec Redirige DataMapper & Rails
- 13. Comment rediriger un non-www vers www en utilisant htaccess?
- 14. Rediriger les requêtes non www sans rediriger les sous-domaines
- 15. IIS7 redirige automatiquement vers null (dans IE)
- 16. Rails personnalisés conçoivent urls
- 17. Règle de réécriture d'Umbraco pour les domaines non-www
- 18. HttpListner: intercepter les requêtes vers WCF DataService
- 19. htaccess rule rediriger non www vers www - litespeed server
- 20. htaccess ajouter slash et forcer www avec urls propres
- 21. .htaccess Rediriger non-WWW WWW préserver chaîne URI
- 22. Redirection vers www en IIS7 - mode pipeline classique
- 23. Liens avec WWW dans Wordpress rediriger vers la page d'accueil
- 24. before_filter dans les requêtes Rails et ajax
- 25. Filtrage des requêtes ActiveRecord dans les rails
- 26. Rails et map.resources Aide Urls
- 27. Réécriture d'URL et redirection 301 ... Redirige vers l'URL d'origine
- 28. Mon fichier routes.rb ne me redirige pas vers/
- 29. Jquery redirige les utilisateurs vers une balise d'ancrage spécifique
- 30. 301 urls
pourquoi voulez-vous www là-bas? qu'est-ce que ça te donne? Caisse http://no-www.org/index.php –
@James - Une utilisation courante de www. est ainsi que vous n'avez pas besoin d'un second domaine "sans cookie" pour servir le contenu statique. – MiffTheFox