Как удалить косую черту URL в приложении Rails? (в представлении SEO) - PullRequest
5 голосов
/ 09 марта 2009

Чтобы избежать дублирования контента, я бы хотел, чтобы страницы моего сайта не были доступны по нескольким URL-адресам (с косой чертой или без нее).

В настоящее время URL

catalog/product/1

и

catalog/product/1/

ведет на ту же страницу. Моя цель состоит в том, чтобы второй URL перенаправлял на первый (перенаправление 301, конечно). Ни одна страница моего сайта не должна быть доступна через косую черту, кроме моей домашней страницы / очевидно.

Каков наилучший способ сделать это? Используя .htaccess или rout.rb? Как бы вы это сделали?

Примечание: я разрабатываю с Ruby on Rails 1.2.3

Ответы [ 4 ]

15 голосов
/ 26 августа 2010

Вы можете использовать http://github.com/jtrupiano/rack-rewrite, чтобы перезапись URL-адресов была независимой от различий в веб-серверах.

Пример использования в рельсах:

config.gem 'rack-rewrite', '~> 1.0.0'
require 'rack/rewrite'
config.middleware.insert_before(Rack::Lock, Rack::Rewrite) do
  r301 %r{(.+)/$}, '$1'
end
9 голосов
/ 09 марта 2009

Я бы использовал Apache mod_rewrite . Попробуйте это:

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

РЕДАКТИРОВАТЬ: Добавлено R = 301. Я предполагаю, что в этом есть преимущество для SEO по сравнению с 302.

2 голосов
/ 25 августа 2010

Вы можете сделать это с помощью гема перезаписи стойки. Вот как: http://nanceskitchen.com/2010/05/19/seo-heroku-ruby-on-rails-and-removing-those-darn-trailing-slashes/

0 голосов
/ 09 марта 2009

Вы не можете получить перенаправление с помощью rout.rb. Я полагаю, вы могли бы создать контроллер, который просто выдает перенаправления и указывает на него все URL, заканчивающиеся на '/', но это кажется излишне сложным. Вместо этого я бы использовал mod_rewrite в файле .htaccess:

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