2011-10-25 1 views
2

에서 나는 Ruby on Rails. Unicode routes로 비슷한 질문을 가지고 있지만 대답은 거기에 나를 위해 작동하지 않는 작업으로 표시.레일 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"를 들어, 자본 C3 대신 C3의 A4와 A4를 확인합니다.

그래서 모두 get CGI.escape("bonitätsauskunft")Rack::Utils.escape("bonitätsauskunft")가 일치하지 않습니다.

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/} 

나를 위해 작동하는 유일한 것은이 어색 :

나는 또한 행운과 노력

# 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 

두 번째 경로, 물론 그래서는 사용할 수 필요 Rails가 UmlautConstraint를 만족시키는 방법을 모르기 때문에 link_to("Bonitätsauskunft", :lp_credit_reference)과 같은 링크를 생성하는 경로를 지정했습니다.

정상적으로 쉬운 방법이 없습니까? 필자는 지금까지 레일 3이 국제화면에서 더 나아질 것이라고 생각했습니다.

레일 3.0.10, 루비 1.9.2, 승객 3.07 아파치 2.

답변

1

그것은 모든 브라우저에서 작동 CGI.escape("bonitätsauskunft").downcase

와 함께 첫 번째 아이디어를 사용합니다. 브라우저 인코딩에 의존하지 않고 SERVER 인코딩을 사용합니다. 다른 서버 (webrick)를 사용하면 경로를 변경해야 할 수 있습니다.

나는 몇 시간 동안 성공적으로 "유니 코드"노선이 유형을 사용하고 있는데 정말 좋은 SEO 효과가 있습니다.

+0

둘 다 확실한가요? 이는 cgi ("neugründungen")를 얻을 수와 downcase => "landing_pages 번호 신생", :.로 => : lp_startups이 이는 cgi ("neugründungen") => "landing_pages 번호 신생"을 얻을 – Jan