Como remover um URL barra invertida em um aplicativo de Rails? (Em uma visão SEO)
-
06-07-2019 - |
Pergunta
A fim de evitar a duplicação de conteúdo, eu gostaria de evitar as páginas de meu site ser acessível por vários URLs (com ou sem barra final).
Atualmente, os URLs
catalog/product/1
e
catalog/product/1/
levar para a mesma página. Meu objetivo é que o segundo redirecionamento URL para o primeiro (redirecionamento 301, é claro). Nenhum página do meu site deve ser acessível com uma barra, excepto a minha home page / obviamente.
Qual é a melhor maneira de fazer isso? Usando .htaccess ou routes.rb? Como você faria isso?
NB: Estou desenvolvendo com Ruby on Rails 1.2.3
Solução
Eu usaria Apache do mod_rewrite . Tente isto:
RewriteEngine on
RewriteRule ^(.+)/$ $1 [R=301,L]
EDIT: Adicionado R = 301. Eu estou supondo que há uma vantagem SEO para que vs. o padrão 302.
Outras dicas
Você pode usar http://github.com/jtrupiano/rack-rewrite para url reescrita para ser independente das diferenças de servidores web.
Exemplo de uso na aplicação rails:
config.gem 'rack-rewrite', '~> 1.0.0'
require 'rack/rewrite'
config.middleware.insert_before(Rack::Lock, Rack::Rewrite) do
r301 %r{(.+)/$}, '$1'
end
Você pode fazer isso usando a jóia de rack de reescrita. Veja como: http://nanceskitchen.com/2010/05/19/seo-heroku-ruby-on-rails-and-removing-those-darn-trailing-slashes/
Você não pode obter um redirecionamento usando routes.rb. Eu suponho que você poderia construir um controlador que apenas questões redirecionamentos e apontar todas as URLs que terminam em '/' para ele, mas que parece desnecessariamente complicado. Em vez disso, eu uso mod_rewrite em um arquivo .htaccess:
RewriteRule ^(.+)/$ $1 [R=301,L]