2013-04-08 6 views
5

Я добавил слизняков в некоторых из моделей, но из-за SEO, что нужно сделать 301 переадресацию со старых ссылок: старый:Рубин на рельсы 301 Перенаправление

http://host.com/foo/1 

новый:

http://host.com/foo/foo_slug 

вопрос: Как реализовать 301 перенаправление в этом случае? и возможно ли реализовать переадресацию 301 из верхней ссылки? Как это:

http://host.com/foo/FOO_SLUG -> http://host.com/foo/foo_slug 

ответ

13

Вы должны быть в состоянии перенаправлять со статусом 301, добавив в ваш контроллер действий:

redirect_to "http://host.com/foo/foo_slug", :status => 301 

Смотрите документацию по API для redirect_to для деталей.

И не должно быть никаких проблем с перенаправлением URL с верхним обложением в нижние версии, хотя это может быть лучше обработано чем-то на уровне HTTP-сервера, например, правилами Apache mod_rewrite.

+0

.. или конфигурацию nginx. пассажиры, кажется, более популярны на nginx – scones

+0

Благодарим за ответ. Rails 3 позволяет создавать 301 переадресацию непосредственно с маршрутов.rb, лучше ли это делать в контроллере или на маршрутах? – xamenrax

+1

В вашем случае я думаю, вам нужно будет сделать это в действии контроллера, так как я предполагаю, что вы будете искать пули из базы данных? Если это так, код для поиска записи и поиска ее slug может произойти только в действии контроллера, а не в 'routes.rb' –

2

Для 301 перенаправления написать этот код в контроллере:

заголовков [ "Status"] = "301 Moved постоянно"

redirect_to "http://host.com/foo/foo_slug" # в вашем случае

И второй вопрос , используйте заглавные буквы или вниз, если вы указали URL-адрес жесткого кода.

В противном случае используйте интерполяцию ruby, помещая весь URL в строку

+0

Вместо жесткого кода заголовок 'Status', почему бы просто не пройти': status => 301', и пусть Rails обрабатывает форматирование этого заголовка (см. Мой ответ для примера) –

+0

да, это еще один вариант. благодаря –

Смежные вопросы