Выполнение переадресации 301 на статических страницах в приложении Rails 2.3.8

У меня есть приложение Rails, которое использует контроллер static_pages для отображения статических страниц в приложении, и я ищу лучшее решение для выполнения перенаправления 301 определенных страниц — например, /dentist перенаправляется на < strong>/дантист-лондон

Я использую Rails 2.3.8.

Контроллер static_pages выглядит так:

class StaticPagesController < ApplicationController

  def display
    if static_page_exists?
      render_static_page
    else
      raise ActiveRecord::RecordNotFound
    end
  end

  protected

  def static_page_exists?
    File.exists? template_path
  end

  def template_path
    File.join('app', 'views', 'static_pages', file_name)
  end

  def render_static_page
    render :template => File.join('static_pages', file_name)
  end

  def file_name
    File.join(params[:path]) + '.html.haml'
  end

end

Этот контроллер сопоставляет страницы с именем статической страницы и отображает содержимое.

Маршрут выглядит так:

  map.static_page '*path',  :controller => 'static_pages', :action => 'display'

Я могу переименовать файл страницы app/views/static_pages/dentist.html.haml в app/views/static_pages/dentist-london.html.haml, однако я не уверен как выполнить перенаправление 301 для этого изменения.

Кто-нибудь может дать совет?

Я думаю, что включил весь соответствующий код, но не стесняйтесь спрашивать, если что-то отсутствует/не имеет смысла.

заранее спасибо


person Stephen Provis    schedule 22.07.2011    source источник


Ответы (1)


Если ваш набор статических отображений известен и вы можете вывести его с помощью регулярного выражения, я бы поместил их в какой-нибудь файл, созданный вами, а затем использовал промежуточное ПО Rack для загрузки файла, его анализа и проверки всех входящих запросов.

Похоже, что нет особых причин для того, чтобы пройти весь стек Rails, поэтому подход промежуточного программного обеспечения является более оптимальным.

Возможно, ваш файл сопоставления выглядит примерно так:

dentist,dentist-london
foo,bar

Где, если вы разделите на ,, то первый столбец будет «источником», а второй столбец — «назначением» для перенаправления. Поместите это в Hash для быстрого поиска, и все готово.

person Cody Caughlan    schedule 22.07.2011
comment
Интересное решение, выполнение перенаправления вне стека Rails имеет смысл, я не очень разбираюсь в Rack Middleware, но Google быстро придумал это (hugofrappier.wordpress.com/2009/11/18/), который выглядит очень многообещающий. Спасибо за ответ, я попробую это утром и обновлю этот вопрос. Спасибо еще раз. - person Stephen Provis; 22.07.2011