У меня есть старое приложение, написанное на PHP, и теперь я заменяю его новым приложением RoR. В старом приложении есть такие ссылки, как "this-is-seo-title,n123.html". В htaccess есть правило, которое переводит эти ссылки на news.php?id=123.

Теперь, когда я устанавливаю приложение RoR, ссылки находятся в «пути RoR» (:controller/:action/:id). Это круто и красиво, но в Google у меня около 50 тысяч проиндексированных подстраниц. Я не хочу, чтобы эти проиндексированные подстраницы были сломаны, поэтому теперь вот вопрос:

Могу ли я создать новые правила в файле htaccess, которые будут переводить ссылки «this-is-seo-title, n123.html» в /news/123?

Я еще не развернул приложение, и у меня нет доступа к среде с пассажирским модулем, поэтому я не могу протестировать его самостоятельно.

0
Arti 8 Апр 2011 в 19:27

1 ответ

Я не думаю, что нужно использовать htaccess. Если вы переходите на рельсы, то делайте это с помощью помощников рельсов. Я думаю, что это должно работать в вашем route.rb:

match 'this-is-seo-title,n:id.html' => 'news#show'

Этот маршрут вызовет NewsController и действие show со значением 123 в качестве параметра :id. Это то, что вы искали?

Редактировать:

Для Rails 2

map.connect 'this-is-seo-title,n:id.html', :controller => 'news', :action => 'show'

По крайней мере, я думаю, что это сработает в Rails 2. У меня нет запущенной и работающей среды atm для тестирования. Дайте мне знать, если это не сработает.

0
DanneManne 8 Апр 2011 в 19:55
Я ошибся и работаю на 2.3.6 RoR. Можно ли заставить его работать с версиями под RoR3?
 – 
Arti
8 Апр 2011 в 19:41
Я пробовал: map.connect '/news,n:id.html', :controller => 'posts', :action => 'show' и map.connect 'news,n:id.html', :controller => 'posts', :action => 'show', и я получаю сообщение об ошибке: маршрут не соответствует "/news,n897.html" с {:method=>:get}
 – 
Arti
8 Апр 2011 в 21:33