Come rimuovere una barra finale URL in un'app Rails? (in una vista SEO)
-
06-07-2019 - |
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
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
Puoi farlo usando la gemma di riscrittura in rack. Ecco come: http://nanceskitchen.com/2010/05/19/seo-heroku-ruby-on-rails-and-removing-those-darn-trailing-slashes/
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]