2009-03-09 21 views
5

Um Inhalte Doppelarbeit zu vermeiden, würde Ich mag die Seiten meiner Website vermeiden zugänglich ist durch mehrere URLs (mit oder ohne Slash am Ende).Wie entferne ich den Schrägstrich einer URL in einer Rails App? (In einer SEO-Ansicht)

Derzeit sind die URLs

catalog/product/1 

und

catalog/product/1/ 

führen zu der gleichen Seite. Mein Ziel ist es, dass die zweite URL auf die erste umleitet (natürlich Redirection 301). Keine Seite meiner Website sollte mit einem Schrägstrich erreichbar sein, außer meiner Homepage/offensichtlich.

Was ist der beste Weg, dies zu tun? Mit .htaccess oder routes.rb? Wie würdest du das machen?

NB: Ich entwickle mit Ruby on Rails 1.2.3

Antwort

9

würde ich Apache's mod_rewrite verwenden. Versuchen Sie folgendes:

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

EDIT: Added R = 301. Ich vermute, es ist ein SEO Vorteil, dass im Vergleich zu dem Standard 302.

+0

Danke für die Antwort. Ich habe es gerade getestet und ein merkwürdiges Verhalten beobachtet: Es schreibt die URL neu und fügt den absoluten Pfad der Seite hinzu! Zum Beispiel, wenn ich versuche, auf http://www.mysite.com/test/ zuzugreifen, leitet es zu http://www.mysite.com/home/mysite/public_html/test !! Verstehst du das? – Flackou

+1

Hmm, Sie müssen möglicherweise "RewriteBase /" vor der RewriteRule-Zeile hinzufügen. –

+0

Ok, es funktioniert jetzt. Vielen Dank für Ihre Hilfe. – Flackou

0

Sie können nicht eine Umleitung mit routes.rb bekommen. Ich nehme an, Sie könnten einen Controller erstellen, der nur Weiterleitungen ausgibt und alle URLs, die auf '/' enden, darauf verweist, aber das erscheint unnötig kompliziert. Stattdessen würde ich mod_rewrite in einer .htaccess Datei:

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

Sie könnten http://github.com/jtrupiano/rack-rewrite für URL-Rewriting unabhängig von den Unterschieden in Web-Servern verwenden.

Beispiel für die Verwendung in Rails-Anwendung:

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

In Rails 4, müssen Sie mit 'Rack-:: Runtime' (oder einem anderen), wie' Rack-:: Lock' ist nicht in der Multi-Threaded-Rails-Umgebung standardmäßig aktiviert 'Rack-:: Lock' ersetzen in Schienen 4. –

Verwandte Themen