SEO дружественные URL, где используемая фраза может измениться в Rails - PullRequest
1 голос
/ 22 мая 2010

Скажем, у меня есть http://www.mysite.com/I-Like-Cheeseburgers, и я хочу, чтобы он указывал на Item с идентификатором 3. Через некоторое время я изменяю название элемента, и теперь его http://www.mysite.com/I-Like-Hamburgers (и, возможно, много раз).Я хочу, чтобы все эти URL-адреса оставались указанными на элемент 3. Эффективно ли просто хранить таблицу [strings, item_ids] и выполнять поиск по этому вопросу?Есть ли лучший способ?

Ответы [ 3 ]

4 голосов
/ 22 мая 2010

Или вы можете сделать это как stackoverflow.com

/2193316/seo-druzhestvennye-url-gde-ispolzuemaya-fraza-mozhet-izmenitsya-v-rails

Вы сохраняете идентификатор вопроса (2887068) в ссылке, где текстовая часть может быть изменена и все равно попадет на ту же страницу./2193316/seo-druzhestvennye-url-gde-ispolzuemaya-fraza-mozhet-izmenitsya-v-rails или /2193316/seo-druzhestvennye-url-gde-ispolzuemaya-fraza-mozhet-izmenitsya-v-rails отправит вас на ту же страницу.

, поэтому для вашего примера это будет:

http://www.mysite.com/items/3/I-Like-Cheeseburgers
2 голосов
/ 22 мая 2010

Вы также можете использовать плагин friendly_id .

С опцией :use_slug она поддерживает историю постоянных ссылок и предлагает решения для перенаправления на текущий URL и т. Д.

class YourModel < ActiveRecord::Base
  has_friendly_id :title, :use_slug => true
end

Подробнее см. документацию .

0 голосов
/ 22 мая 2010

в вашей модели сделать

class Article < AR::Base
  def to_param
    "#{id}-#{name.parameterize}"
  end
end

Ваши ссылки будут выглядеть так: http://mysite.com/articles/3-i-like-cheeseburgers

Когда вы пытаетесь получить объект, выполнение Article.find(params[:id]) автоматически преобразует «3-i-like-cheeseburgers» в целое число и выбирает правильный объект. Это позволяет изменять имя, сохраняя при этом ссылку, указывающую на тот же объект статьи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...