2009-03-09 14 views
5

İçeriğin çoğaltılmasını önlemek için, sitemin sayfalarının birkaç URL tarafından erişilebilir olmasını (eğik çizgi ile veya bitişsiz olarak) önlemek isterim.Rails uygulamasında bir URL'nin izleyen eğik çizgisi nasıl kaldırılır? (SEO görünümünde)

Halen URL'ler

catalog/product/1 

ve

catalog/product/1/ 

aynı sayfaya kurşun. Hedefim, ikinci URL'nin ilk yönlendirmesidir (tabi ki yönlendirme 301). Sitemin hiçbir sayfasının, ana sayfamın/açıkçası hariç, izleyen bir eğik çizgi ile erişilebilir olması gerekir.

Bunu yapmanın en iyi yolu nedir? .htaccess veya routes.rb kullanarak? Bunu nasıl yaptın?

NB: Ben Ruby on Rails ile geliştiriyorum 1.2.3

cevap

9

Ben Apache's mod_rewrite kullanmayı tercih ediyorum. Bu deneyin:

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

DÜZENLEME: Eklendi R = 301. Sanırım varsayılan 302'ye göre bir SEO avantajı var.

+0

teşekkürler. Sadece test ettim ve garip bir davranış gözlemledim: URL, sayfanın mutlak yolunu ekleyerek yeniden yazıyor! Örneğin, http://www.mysite.com/test/ adresine erişmeye çalışırsam, http://www.mysite.com/home/mysite/public_html/test adresine yönlendirir !! Bunu anlıyor musun? – Flackou

+1

Hmm, RewriteRule satırından önce "RewriteBase /" eklemeniz gerekebilir. –

+0

Tamam, şimdi çalışıyor. Yardımın için çok teşekkürler. – Flackou

0

Rota.RB'yi kullanarak bir yönlendirme alamıyorsunuz. Yalnızca yönlendirmeleri yayınlayan ve '/' ile biten tüm URL'leri işaret eden bir denetleyici oluşturabileceğinizi varsayalım, ancak bu gereksiz bir şekilde karmaşık görünüyor. Bunun yerine, bir .htaccess dosyasında algılaması ediyorum: Sen raf yeniden yazma gem kullanarak bunu yapabilirsiniz

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

URL yeniden yazma için web sunucularındaki farklılıklardan bağımsız olması için http://github.com/jtrupiano/rack-rewrite kullanabilirsiniz. raylar uygulamada

Örnek kullanım: cevap için

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

Rails 4'te, "Rack :: Runtime" (veya Rack) ile "Rack :: Lock" un yerini almanız gerekir, çünkü "Rack :: Lock", varsayılan olarak etkinleştirilmiş çok kanallı Rails ortamında mevcut değildir. Raylar 4. –

İlgili konular