Ruby on Rails и стандартный mod_rewrite

#ruby-on-rails #mod-rewrite #mod-rails

#ruby-on-rails #переписать мод #mod-rails

Вопрос:

У меня есть старое приложение, написанное на 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 ?

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

Ответ №1:

Я не думаю, что необходимо использовать htaccess. Если вы переходите на rails, то делайте это с помощью помощников rails. Я думаю, это должно сработать в ваших routes.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 для тестирования. Дайте мне знать, если это не сработает.

Комментарии:

1. Я допустил ошибку, и я работаю на версии 2.3.6 RoR. Возможно ли заставить его работать с версиями под RoR3?

2. Я пробовал: map.connect ‘/новости,n:id.html ‘, :controller => ‘сообщения’, :action => ‘показать’ и map.connect ‘новости,n:id.html ‘, : controller => ‘posts’, :action => ‘show’ и я получаю сообщение об ошибке: маршрут не совпадает » / новости,n897.html » с помощью {:method=>:get}