2011-07-22 13 views
0

静的ページをアプリケーションにレンダリングするためにstatic_pagesコントローラを使用するRailsアプリケーションがあり、特定のページの301リダイレクトを実行する最適なソリューションを探しています。例では、/私はRailsの2.3.8を使用していますRails 2.3.8アプリケーション内の静的ページで301リダイレクトを実行

/歯科医、ロンドンにリダイレクト歯科医だろう。

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' 

私はアプリ/ビュー/ static_pages /歯科医-london.htmlにアプリ/ビュー/ static_pages/dentist.html.hamlファイルのページの名前を変更することができます。 hamlしかし、この変更で301リダイレクトを実行する方法がわかりません。

誰でもアドバイスをいただけますか?

私はすべての関連コードを含めていますが、何かが不足しているかどうか尋ねることは自由です。理にかなっていません。あなたの静的マッピングのセットが知られており、私は自分自身の工夫のいくつかのファイルに入れて、ファイルをロードするために、いくつかのラックミドルウェアを使用するよりも、あなたは正規表現を経由して、それを推測することができた場合は、事前に

おかげ

答えて

1

は、パースすべての着信要求を検査します。

これは、あなたのRailsスタック全体に行き渡る理由があまりないように聞こえるので、ミドルウェアのアプローチが最適です。あなたが最初の列よりも,に分かれている場合、「ソース」で、2番目の列はにリダイレクトされる「目的地」である

dentist,dentist-london 
foo,bar 

たぶん、あなたのマッピングファイルは次のようなものです。それをハッシュに入れて、素早く検索してください。

+0

Railsスタックの外でリダイレクトを実行することは理にかなっていますが、私はRack Middlewareにはあまり触れられていませんが、すばらしいGoogleがこれを思いつきました(http://hugofrappier.wordpress.com/2009/11/ 18/permanent-301-redirections-a-rack-middle-in-in-rails /)は非常に有望です。応答してくれてありがとう、私は午前中にこれを試し、この質問を更新します。再度、感謝します。 –

関連する問題