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

Foi útil?

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]
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top