2011-10-25 4 views
2

私はRuby on Rails. Unicode routesと似た質問をしていますが、ここで働いていると答えられています。Rails 3:ルート内のウムラウト(または他のユニコード)

ウムラウト(ä)を含むランディングページの基本的なルートを設定したいと考えています。それはSEOの目的のためにちょうどそうでなければなりません。

# encoding: UTF-8 
Udb::Application.routes.draw do 
    get "bonitätsauskunft" => "landing_pages#credit_reference", :as => :lp_credit_reference 

私は私のブラウザでhttp://localhost/bonitätsauskunftを入力すると、私は、ルーティングエラーNo route matches "/bonit%c3%a4tsauskunft"を取得します。 URLにウムラウトをエンコードする複数の方法があり、ブラウザがどちらを使用しているのかわからないため、クエリ文字列はエスケープされていないので、私は悪いと思う。

たとえば、CGI.escape("bonitätsauskunft") # => "bonit%C3%A4tsauskunft"のように、Firefoxが送信するように、c3とa4の代わりに大文字のC3とA4に注意してください。

したがって、get CGI.escape("bonitätsauskunft")Rack::Utils.escape("bonitätsauskunft")の両方が一致しません。

私も運を試してみました:、

# encoding: UTF-8 
class UmlautConstraint 
    def initialize(page) 
    @page = page 
    end 

    def matches?(request) 
    request.params[:page] == @page 
    end 
end 

Udb::Application.routes.draw do 
    get ":page" => "landing_pages#credit_reference", :constraints => UmlautConstraint.new("bonitätsauskunft") 
    get "bonitätsauskunft" => "landing_pages#credit_reference", :as => :lp_credit_reference 

もちろんの第2の経路を、私が使用できるように、必要とされている:私の作品

get ":page" => "landing_pages#credit_reference", :as => :lp_credit_reference, :page => /bonitätsauskunft/ 
get ":page" => "landing_pages#credit_reference", :as => :lp_credit_reference, :constraints => {:page => /bonitätsauskunft/} 

唯一のことは厄介ですRailsはUmlautConstraintをどのように満たすか分からないため、link_to("Bonitätsauskunft", :lp_credit_reference)のようなリンクを作成するためにrouteという名前を付けました。

これを行うには、通常の簡単な方法はありませんか?私はレール3が今までには国際化のほうが良いと思っていました。

Rails 3.0.10、Ruby 1.9.2、Apache2 with passenger 3.0.7。

答えて

1

は、それは任意のブラウザで動作しますCGI.escape("bonitätsauskunft").downcase

であなたの最初のアイデアを使用してください。ブラウザのエンコーディングに依存するのではなく、SERVERのエンコーディングに依存します。別のサーバー(webrick)を使用すると、ルートを変更する必要があります。

私はこのタイプの「ユニコード」ルートをしばらく使っていますが、実際には良いSEO効果があります。

+0

確かに両方のことをお考えですか? CGI.escape( "neugründungen")=> "landing_pages#startups"、:as =>:lp_startups CGI.escape( "neugründungen")=> "landing_pages#startups" – Jan