Domanda

Al fine di evitare la duplicazione dei contenuti, vorrei evitare che le pagine del mio sito siano accessibili da diversi URL (con o senza barra finale).

Attualmente, gli URL

catalog/product/1

e

catalog/product/1/

porta alla stessa pagina. Il mio obiettivo è che il secondo URL reindirizzi al primo (reindirizzamento 301, ovviamente). Nessuna pagina del mio sito dovrebbe essere accessibile con una barra finale, tranne la mia home page / ovviamente.

Qual è il modo migliore per farlo? Usando .htaccess o route.rb? Come lo faresti?

NB: sto sviluppando con Ruby on Rails 1.2.3

È stato utile?

Soluzione

Vorrei utilizzare mod_rewrite di Apache . Prova questo:

RewriteEngine on
RewriteRule ^(.+)/$ $1 [R=301,L]

MODIFICA: aggiunto R = 301. Immagino che ci sia un vantaggio SEO rispetto a quello predefinito 302.

Altri suggerimenti

Puoi utilizzare http://github.com/jtrupiano/rack-rewrite per url riscrittura per essere indipendente dalle differenze nei web server.

Esempio di utilizzo nell'applicazione Rails:

config.gem 'rack-rewrite', '~> 1.0.0'
require 'rack/rewrite'
config.middleware.insert_before(Rack::Lock, Rack::Rewrite) do
  r301 %r{(.+)/$}, '$1'
end

Non puoi ottenere un reindirizzamento usando route.rb. Suppongo che potresti costruire un controller che emette solo reindirizzamenti e punti tutti gli URL che terminano in '/', ma sembra inutilmente complicato. Invece, userei mod_rewrite in un file .htaccess:

RewriteRule ^(.+)/$ $1 [R=301,L]
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top