Comment supprimer la barre oblique de fin d'une URL dans une application Rails? (dans une vue SEO)
-
06-07-2019 - |
Question
Afin d'éviter la duplication de contenu, j'aimerais éviter que les pages de mon site soient accessibles par plusieurs URL (avec ou sans barre de fin).
Actuellement, les URL
catalog/product/1
et
catalog/product/1/
mène à la même page. Mon objectif est que la deuxième URL redirige vers la première (redirection 301, bien sûr). Aucune page de mon site ne doit être accessible avec une barre oblique, sauf ma page d'accueil / de toute évidence.
Quelle est la meilleure façon de faire cela? Utiliser .htaccess ou routes.rb? Comment feriez-vous cela?
NB: Je développe avec Ruby on Rails 1.2.3
La solution
Je voudrais utiliser le mod_rewrite d'Apache . Essayez ceci:
RewriteEngine on
RewriteRule ^(.+)/$ $1 [R=301,L]
EDIT: Ajout de R = 301. Je devine qu'il y a un avantage de référencement à cela par rapport au 302 par défaut.
Autres conseils
Vous pouvez utiliser http://github.com/jtrupiano/rack-rewrite pour l'URL la réécriture est indépendante des différences entre les serveurs Web.
Exemple d'utilisation dans l'application rails:
config.gem 'rack-rewrite', '~> 1.0.0'
require 'rack/rewrite'
config.middleware.insert_before(Rack::Lock, Rack::Rewrite) do
r301 %r{(.+)/$}, '$1'
end
Vous pouvez le faire en utilisant la gemme de réécriture de rack. Voici comment: http://nanceskitchen.com/2010/05/19/seo-heroku-ruby-on-rails-and-removing-those-darn-trailing-slashes/
Vous ne pouvez pas obtenir une redirection à l'aide de routes.rb. Je suppose que vous pouvez construire un contrôleur qui émet simplement des redirections et qui pointe vers toutes les URL se terminant par "/", mais cela semble inutilement compliqué. Au lieu de cela, j'utiliserais mod_rewrite dans un fichier .htaccess:
RewriteRule ^(.+)/$ $1 [R=301,L]